I think will be nice add support for swf (flash) i use this script from JamesH,,uff i can't see how attach txt files i use the code tag
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ExportSWFE.py - 2009 by James Huang <elastic192@gmail.com>
# http://tw.myblog.yahoo.com/jw!5nbbef.RAx8aIbO00RkKIw--
# Copyright under GPL v2
# This script requires the package SWFTools(http://www.swftools.org/)
# it generate a temp script
# and use swfc to compile the script
# so you need to copy swfc.exe to \Program Files\Gimp-2.0\bin folder
from gimpfu import *
import os, sys, string
import random
escape_dict={'\a':r'\A',
'\b':r'\B',
'\c':r'\C',
'\f':r'\F',
'\n':r'\N',
'\r':r'\R',
'\t':r'\T',
'\v':r'\V',
'\'':r'\'',
'\"':r'\"',
'\0':r'\0',
'\1':r'\1',
'\2':r'\2',
'\3':r'\3',
'\4':r'\4',
'\5':r'\5',
'\6':r'\6',
'\7':r'\7',
'\8':r'\8',
'\9':r'\9'}
def raw(text):
"""Returns a raw string representation of text"""
new_string=''
for char in text:
try: new_string+=escape_dict[char]
except KeyError: new_string+=char
return new_string
def func_frameEffect(frameRate, file, totalLayers, curLayer, frameIndex, imgWD, imgHT):
effFrameNums = frameRate / 3
nextLayer = totalLayers-curLayer+1
if nextLayer > totalLayers:
nextLayer = 1
file.write(" .jump BG%05d x=%d y=%d scale=100%% \n" % (totalLayers-curLayer, imgWD/2, imgHT/2))
#rnd = random.randrange(9)
rnd = curLayer % 9
if rnd == 0:
file.write(" .put BG%05d pin=center x=%d y=%d scale=0%% \n" % (nextLayer, imgWD/2, imgHT/2))
frameIndex = frameIndex + effFrameNums
file.write(" .frame %d\n" % frameIndex)
file.write(" .change BG%05d scale=0%% \n" % (totalLayers-curLayer))
file.write(" .change BG%05d scale=101%% \n" % (nextLayer))
elif rnd == 1:
file.write(" .put BG%05d pin=center x=%d y=%d scale=100%% \n" % (nextLayer, imgWD+imgWD/2, imgHT+imgHT/2))
frameIndex = frameIndex + effFrameNums
file.write(" .frame %d\n" % frameIndex)
file.write(" .move BG%05d x=-%d y=-%d\n" % (totalLayers-curLayer, imgWD/2, imgHT/2))
file.write(" .move BG%05d x=%d y=%d\n" % (nextLayer, imgWD/2-1, imgHT/2-1))
elif rnd == 2:
file.write(" .put BG%05d pin=center x=-%d y=-%d scale=100%% \n" % (nextLayer, imgWD/2, imgHT/2))
frameIndex = frameIndex + effFrameNums
file.write(" .frame %d\n" % frameIndex)
file.write(" .move BG%05d x=%d y=%d\n" % (totalLayers-curLayer, imgWD+imgWD/2, imgHT+imgHT/2))
file.write(" .move BG%05d x=%d y=%d\n" % (nextLayer, imgWD/2+1, imgHT/2+1))
elif rnd == 3:
file.write(" .put BG%05d pin=center x=-%d y=%d scale=100%% \n" % (nextLayer, imgWD/2, imgHT+imgHT/2))
frameIndex = frameIndex + effFrameNums
file.write(" .frame %d\n" % frameIndex)
file.write(" .move BG%05d x=%d y=-%d \n" % (totalLayers-curLayer, imgWD+imgWD/2, imgHT/2))
file.write(" .move BG%05d x=%d y=%d \n" % (nextLayer, imgWD/2+1, imgHT/2-1))
elif rnd == 4:
file.write(" .put BG%05d pin=center x=%d y=-%d scale=100%% \n" % (nextLayer, imgWD+imgWD/2, imgHT/2))
frameIndex = frameIndex + effFrameNums
file.write(" .frame %d\n" % frameIndex)
file.write(" .move BG%05d x=-%d y=%d \n" % (totalLayers-curLayer, imgWD/2, imgHT+imgHT/2))
file.write(" .move BG%05d x=%d y=%d \n" % (nextLayer, imgWD/2-1, imgHT/2+1))
elif rnd == 5:
file.write(" .put BG%05d pin=center x=%d y=%d scale=100%% \n" % (nextLayer, imgWD+imgWD/2, imgHT/2))
frameIndex = frameIndex + effFrameNums
file.write(" .frame %d\n" % frameIndex)
file.write(" .move BG%05d x=-%d \n" % (totalLayers-curLayer, imgWD/2))
file.write(" .move BG%05d x=%d \n" % (nextLayer, imgWD/2-1))
elif rnd == 6:
file.write(" .put BG%05d pin=center x=-%d y=%d scale=100%% \n" % (nextLayer, imgWD/2, imgHT/2))
frameIndex = frameIndex + effFrameNums
file.write(" .frame %d\n" % frameIndex)
file.write(" .move BG%05d x=%d \n" % (totalLayers-curLayer, imgWD+imgWD/2))
file.write(" .move BG%05d x=%d \n" % (nextLayer, imgWD/2+1))
elif rnd == 7:
file.write(" .put BG%05d pin=center x=%d y=%d scale=100%% \n" % (nextLayer, imgWD/2, imgHT+imgHT/2))
frameIndex = frameIndex + effFrameNums
file.write(" .frame %d\n" % frameIndex)
file.write(" .move BG%05d y=-%d \n" % (totalLayers-curLayer, imgHT/2))
file.write(" .move BG%05d y=%d \n" % (nextLayer, imgHT/2-1))
else:
file.write(" .put BG%05d pin=center x=%d y=-%d scale=100%% \n" % (nextLayer, imgWD/2, imgHT/2))
frameIndex = frameIndex + effFrameNums
file.write(" .frame %d\n" % frameIndex)
file.write(" .move BG%05d y=%d \n" % (totalLayers-curLayer, imgHT+imgHT/2))
file.write(" .move BG%05d y=%d \n" % (nextLayer, imgHT/2+1))
return frameIndex
#def python_fu_ExportSWF(activeImage, activeLayer, exportDir, audioEnable, audioFile, exportName, frameEffect, flashVersion, frameRate, imageQuality, webLink, removeTmpFile, usedAS, cscFile):
def python_fu_ExportSWF(activeImage, activeLayer, exportDirN, audioEnable, audioFileN, exportNameN, frameEffect, flashVersion, frameRate, imageQuality, webLink, removeTmpFile, loopAnim, loopAudio):
exportSep = str(os.sep)
imgWD = activeImage.width
imgHT = activeImage.height
path1 = gimp.locale_directory
dir1 = os.path.split(path1)
dir2 = os.path.split(dir1[0])
gimp_bin_dir = dir2[0] + "\Bin"
swfc = gimp_bin_dir+"\Swfc.exe"
if not os.path.isfile(swfc):
#pdb.gimp_message(path1+", "+gimp.data_directory+", "+gimp.directory)
#pdb.gimp_message(gimp_bin_dir)
pdb.gimp_message("This script requires the package SWFTools\n"
"(http://www.swftools.org/)\n"
"it generate a temp script\n"
"and use swfc to compile the script\n"
"so you need to copy swfc.exe to\n"+gimp_bin_dir+" folder")
return
usedAS = 0
tmpDir = raw(exportDirN)
exportDir = tmpDir.upper()
exportName = exportNameN.upper()
audioFile = "None"
if audioEnable:
tmpstring = "%s" % audioFileN
if ("None" == tmpstring):
audioEnable = False
else:
tmpF = raw(tmpstring)
audioFile = tmpF.upper()
extFile = os.path.splitext(audioFile)
if extFile[1] != ".MP3" and extFile[1] != ".WAV":
audioEnable = False
if not audioEnable:
tmpstring = "Invalid audioFile %s !\nAudio disable" % audioFile
pdb.gimp_message(tmpstring)
tlen = len(exportDir)
if exportDir[tlen-1] == '\\':
exportSep = ""
outputFile = "%s%s%s" % (exportDir, exportSep, exportName)
scFile = "%s%s%s.sc" % (exportDir, exportSep, exportName)
file = open(scFile, 'w')
# file.write(".flash filename=\"%s\" bbox=%dx%d version=%d fps=%d\n" % (exportName, imgWD, imgHT, flashVersion, frameRate))
file.write(".flash bbox=%dx%d version=%d fps=%d\n" % (imgWD, imgHT, flashVersion, frameRate))
activeImage.undo_group_start()
jpgQuality = imageQuality / 100.0
totalLayers = len(activeImage.layers)
curLayer = totalLayers - 1;
while curLayer >= 0:
if (usedAS and activeImage.layers[curLayer].bpp == 4):
pngFile = "%s%sTemp-gimp-%s%04d.png" % (exportDir, exportSep, exportName, totalLayers-curLayer)
pdb.gimp_edit_copy(activeImage.layers[curLayer])
tmpImage = gimp.Image(activeImage.layers[curLayer].width, activeImage.layers[curLayer].height, 0)
tmpDrawable = gimp.Layer(tmpImage, "Temp", tmpImage.width, tmpImage.height, RGBA_IMAGE, 100, NORMAL_MODE)
pdb.gimp_image_add_layer(tmpImage, tmpDrawable, 0)
pdb.gimp_floating_sel_anchor(pdb.gimp_edit_paste(tmpDrawable,TRUE))
pdb.file_png_save(tmpImage, tmpDrawable, pngFile, pngFile, 0, 9, True, False, False, True, True)
file.write(" .png BG%05d \"%s\"\n" % (totalLayers-curLayer, pngFile))
pdb.gimp_image_delete(tmpImage)
else:
jpgFile = "%s%sTemp-gimp-%s%04d.jpg" % (exportDir, exportSep, exportName, totalLayers-curLayer)
pdb.gimp_layer_resize_to_image_size(activeImage.layers[curLayer])
pdb.file_jpeg_save(activeImage, activeImage.layers[curLayer], jpgFile, jpgFile, jpgQuality, 0, 1, 0, "", 0, 1, 0, 0)
file.write(" .jpeg BG%05d \"%s\"\n" % (totalLayers-curLayer, jpgFile))
# file.write(" .jpeg BG%05d \"Temp-gimp-%s%04d.jpg\"\n" % (totalLayers-curLayer, exportName, totalLayers-curLayer))
curLayer = curLayer - 1
activeImage.undo_group_end()
url = len(webLink)
if url > 0:
file.write("\n")
file.write(" .box box1 color=white fill=#ffffff width=%d height=%d\n" % (imgWD, imgHT))
file.write(" .button mybutton1\n")
file.write(" .show box1 as=area\n")
file.write(" .on_press:\n")
file.write(" getURL(\"%s\", \"_blank\");\n" % webLink)
file.write(" .end\n")
file.write(" .end\n")
if audioEnable:
file.write("\n")
file.write(" .sound sound1 \"%s\"\n" % audioFile)
if loopAudio:
file.write(" .play sound1 loop=-1\n")
else:
file.write(" .play sound1 loop=1\n")
if usedAS:
scF = open(cscFile, 'r')
lines = scF.readlines()
for line in lines:
file.write("%s" % line)
scF.close()
else:
#frameEffect = 1
file.write("\n")
file.write(" .put BG00001 pin=center x=%d y=%d scale=100%%\n" % (imgWD/2, imgHT/2))
if url > 0:
file.write(" .put mybutton1\n")
file.write("\n")
curLayer = totalLayers - 1;
frameIndex = 0
while curLayer >= 0:
resList = string.split(activeImage.layers[curLayer].name, '(')
if len(resList) < 2:
frameTime = 100
else:
ms = resList[1].strip('ms) ')
frameTime = int(ms)
if frameTime < (1000/frameRate):
frameTime = 1000/frameRate
frameIndex = frameIndex + frameRate*frameTime/1000
file.write(" .frame %d\n" % frameIndex)
if curLayer > 0:
if frameEffect:
frameIndex = func_frameEffect(frameRate, file, totalLayers, curLayer, frameIndex, imgWD, imgHT)
else:
file.write(" .put BG%05d pin=center x=%d y=%d scale=100%% \n" % (totalLayers-curLayer+1, imgWD/2, imgHT/2))
else:
if frameEffect:
file.write(" .jump BG%05d x=%d y=%d alpha=100%% \n" % (totalLayers-curLayer, imgWD/2, imgHT/2))
frameIndex = frameIndex + (frameRate/3)
file.write(" .frame %d\n" % frameIndex)
file.write(" .change BG%05d alpha=0%% \n" % (totalLayers-curLayer))
frameIndex = frameIndex + 1
file.write(" .frame %d\n" % frameIndex)
if loopAnim:
file.write(" .action:\n")
file.write(" gotoFrame(1);\n")
file.write(" Play();\n")
file.write(" .end\n")
else:
# if audioEnable:
# file.write(" .stop sound1\n")
file.write(" .action:\n")
file.write(" stop();\n")
file.write(" .end\n")
curLayer = curLayer - 1
file.write(".end\n")
file.close()
# command = "swfc %s" % (scFile)
command = "swfc -o \"%s\" \"%s\"" % (outputFile, scFile)
os.system(command)
#remove temp file
if removeTmpFile:
del_command = "del \"%s%sTemp-gimp-%s*.jpg\"" % (exportDir, exportSep, exportName)
#pdb.gimp_message(del_command)
os.system(del_command)
del_command = "del \"%s\"" % (scFile)
#pdb.gimp_message(del_command)
os.system(del_command)
register(
"python-fu-ExportSWF",
"Export SWF 20090501\nExport the layers of an image as a Shockwave Flash Animation\nJames Huang\nhttp://tw.myblog.yahoo.com/jw!5nbbef.RAx8aIbO00RkKIw--",
"Export SWF 20090501\nExport the layers of an image as a Shockwave Flash Animation\nJames Huang\nhttp://tw.myblog.yahoo.com/jw!5nbbef.RAx8aIbO00RkKIw--",
"James Huang, http://tw.myblog.yahoo.com/jw!5nbbef.RAx8aIbO00RkKIw--",
"GPL V2 License",
"2009",
"<Image>/File/Save/Export SWF File ...",
"RGB*",
[
(PF_DIRNAME, "exportDirN", ("Export to"), ""),
(PF_TOGGLE, "audioEnable", ("Add Audio"), False),
(PF_FILENAME, "audioFileN", ("WAV/MP3 File"), "None"),
(PF_STRING, "exportNameN", ("Filename"), "Export.swf"),
(PF_TOGGLE, "frameEffect", ("Transitions"), False),
(PF_SPINNER, "flashVersion", ("Flash Version"), 8, (6,10,1)),
(PF_SPINNER, "frameRate", ("Frame Rate"), 30, (1,60,1)),
(PF_SPINNER, "imageQuality", ("Image JPEG Quality"), 80, (10,100,5)),
(PF_STRING, "webLink", ("Web Link"), ""),
(PF_TOGGLE, "removeTmpFile", ("Remove Temp File"), True),
(PF_TOGGLE, "loopAnim", ("Loop Animation"), True),
(PF_TOGGLE, "loopAudio", ("Loop Audio"), True),
# (PF_TOGGLE, "usedAS", ("Use Custom Script"), False),
# (PF_FILENAME, "cscFile", ("Script File"), "NONE"),
],
[],
python_fu_ExportSWF,
domain=("gimp20-python", gimp.locale_directory))
main()
that require also "swfc.exe" be included in the bin directory or anyway along the path
As should be no license problem to include in bin gswin32(or 64) .exe , to solve the missed dependency and be able to save & open PDF