local getIndex = function(tbl, index){return (index in tbl) && tbl[index];} function PreUpload(task,reserved) { local cfg = { findInPath = true , OptiPNG = @"optipng.exe" , GraphicsMagick = @"gm.exe" //, ImageMagick = @"d:\path\convert.exe" // better write full path! windows have its own convert.exe , jpgQuality = 91 // IM/GM , pngQuality = 95 // IM/GM, compression and filter , pngJpgRatio = 2 // pngsize / jpgsize } // priorities: OptiPNG, GraphicsMagick, ImageMagick if ( task.type() == "TypeFile") { local filename = task.getFileName(); if (GetFileExtension(filename).tolower()!="png") return true; // only png if (!filename.find(@"\tmd_iu_temp\iu_temp_")) return true; // only IU screenshots task.setStatusText("Optimizing..."); local convert = getIndex(cfg, "GraphicsMagick") || getIndex(cfg, "ImageMagick"); local convertExec = function(args) { args = clone args; local process = Process(convert, cfg.findInPath); if ("GraphicsMagick" in cfg) args.insert(0,"convert"); process.setArguments(args); process.setHidden(true); process.start(); local exitCode = process.waitForExit(); // exit code return exitCode } local jpgName = filename+".jpg"; local ec = 0; if (!(FileExists(jpgName)&&GetFileSize(jpgName)>99)) { if ("OptiPNG" in cfg) { local process = Process(cfg.OptiPNG, cfg.findInPath); process.setArguments([filename]); process.setHidden(true); process.start(); local exitCode = process.waitForExit(); } else if (convert) { convertExec(["-quality", cfg.pngQuality, filename, filename]); } if (convert) { ec = convertExec(["-sampling-factor", "4:4:4", "-quality", cfg.jpgQuality, filename, jpgName]); } } if (convert && ec==0 && (GetFileSize(filename) / GetFileSize(jpgName) >= cfg.pngJpgRatio)) { if (GetFileSize(jpgName)>99) { task.setDisplayName( ExtractFileName(jpgName) ); task.setFileName(jpgName); } } } return true; } function PostUpload(task,reserved) { return true; } |