#!/usr/bin/pike /* * resizer.pike * * Resize a png into another png * * History: * 28/09/2020 Creation from cropper.pike * * Author: Dario Rodriguez dario@softhome.net * This program is distributed under the terms of the GNU GPL v2.1+ */ int main(int argc, array(string) argv) { int xsize,ysize; string infilename; string destfilename; mapping orig; Image.Image image,alpha; if(argc<4 || (argc>1 && argv[1]=="--help")) { Stdio.werror("Syntax: "+argv[0]+" <newwidthxnewheight> <infile.png> <outfile.png>\n"); Stdio.werror("Example: "+argv[0]+" 200x300 file.png dest.png\n"); Stdio.werror("Example: "+argv[0]+" 200x0 file.png dest.png\n"); Stdio.werror("Example: "+argv[0]+" 0x300 file.png dest.png\n"); Stdio.werror("Example result: dest.png\n"); return(1); } xsize=ysize=0; xsize=(int) (argv[1]/"x")[0]; if(sizeof(argv[1]/"x")>1) ysize=(int) (((argv[1]/"x")[1])/"+")[0]; infilename=argv[2]; destfilename=argv[3]; write("* Loading "+infilename+"\n"); orig=Image._load(infilename); image=orig["image"]; alpha=orig["alpha"]; xsize=(xsize!=0)?xsize:(ysize==0)?image->xsize():ysize*image->xsize()/image->ysize(); ysize=(ysize!=0)?ysize:(xsize==0)?image->ysize():xsize*image->ysize()/image->xsize(); write("* Resizing from "+image->xsize()+"x"+image->ysize()+" to "+xsize+"x"+ysize+"\n"); image=image->scale(xsize,ysize); if(!intp(alpha)) alpha=alpha->scale(xsize,ysize); write("* Writing "+destfilename+"...\n"); if(intp(alpha)) Stdio.write_file(destfilename,Image.PNG.encode(image)); else Stdio.write_file(destfilename,Image.PNG.encode(image,(["alpha":alpha]))); write("* Finished successfully\n"); return(0); }