int handle_decode_arguments(char **argv, Images &images, int quality, int scale) { char *ext = strrchr(argv[1],'.'); if (!check_compatible_extension(ext)) { e_printf("Error: expected \".png\", \".pnm\" or \".pam\" file name extension for output file\n"); return 1; } FILE *file = fopen(argv[0],"rb"); if(!file) return 1; FileIO fio(file, argv[0]); if (!flif_decode(fio, images, quality, scale)) return 3; if (scale>1) v_printf(3,"Downscaling output: %ux%u -> %ux%u\n",images[0].cols(),images[0].rows(),images[0].cols()/scale,images[0].rows()/scale); if (images.size() == 1) { if (!images[0].save(argv[1],scale)) return 2; } else { int counter=0; std::vector<char> vfilename(strlen(argv[1])+6); char *filename = &vfilename[0]; strcpy(filename,argv[1]); char *a_ext = strrchr(filename,'.'); for (Image& image : images) { sprintf(a_ext,"-%03d%s",counter++,ext); if (!image.save(filename,scale)) return 2; v_printf(2," (%i/%i) \r",counter,(int)images.size()); v_printf(4,"\n"); } } v_printf(2,"\n"); return -1; }
bool decode_flif(char **argv, Images &images, flif_options &options) { FILE *file = NULL; if (!strcmp(argv[0],"-")) file = stdin; else file = fopen(argv[0],"rb"); if(!file) return false; FileIO fio(file, (file==stdin ? "from standard input" : argv[0])); metadata_options md; md.icc = options.color_profile; md.xmp = options.metadata; md.exif = options.metadata; return flif_decode(fio, images, options, md); }
bool decode_flif(char **argv, Images &images, int quality, int scale, int resize_width, int resize_height) { FILE *file = fopen(argv[0],"rb"); if(!file) return false; FileIO fio(file, argv[0]); return flif_decode(fio, images, quality, scale, resize_width, resize_height); }