#!/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);
}