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
Code:
#!/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
the exe come with swftools that is gpl so should be no problem to use it
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