 |
| GimpChat Member |
Joined: Apr 12, 2010 Posts: 5870
|
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 <[email protected]> # 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
_________________ My 3D Gallery on Deviantart http://photocomix2.deviantart.com/ Main gallery http://www.flickriver.com/photos/photocomix-mandala/ Mandala and simmetry http://www.flickriver.com/photos/photocomix_mandala/

Mrs Wilbress
|
|