#include "config.h" #if !defined HAVE_GETOPT_LONG # include "mygetopt.h" #elif defined HAVE_GETOPT_H # include #endif #include #include #include #include #if defined HAVE_GETOPT_LONG # define mygetopt getopt_long # define myoptind optind # define myoptarg optarg # define myoption option #endif #define DEFAULT_WIDTH 120 #define DEFAULT_HEIGHT 90 #define MOREINFO "Try `%s --help' for more information.\n" static void usage(void); int main(int argc, char *argv[]) { char *srcname = NULL, *dstname = NULL; pipi_image_t *src, *dst; int i, w = DEFAULT_WIDTH, h = DEFAULT_HEIGHT, bpp = 24; for(;;) { int option_index = 0; static struct myoption long_options[] = { { "bpp", 1, NULL, 'b' }, { "geometry", 1, NULL, 'g' }, { "help", 0, NULL, 'h' }, { NULL, 0, NULL, 0 }, }; int c = mygetopt(argc, argv, "b:g:h", long_options, &option_index); if(c == -1) break; switch(c) { case 'b': bpp = atoi(myoptarg); if(bpp != 32 && bpp != 24 && bpp != 16) { fprintf(stderr, "%s: invalid bpp -- %s\n", argv[0], myoptarg); return EXIT_FAILURE; } break; case 'g': w = atoi(myoptarg); if(strchr(myoptarg, 'x')) h = atoi(strchr(myoptarg, 'x') + 1); break; case 'h': usage(); return EXIT_SUCCESS; default: fprintf(stderr, "%s: invalid option -- %c\n", argv[0], c); printf(MOREINFO, argv[0]); return EXIT_FAILURE; } } for(i = myoptind; i < argc; i++) { if(!srcname) srcname = argv[i]; else dstname = argv[i]; } if(!srcname || !dstname) { fprintf(stderr, "%s: too few arguments\n", argv[0]); printf(MOREINFO, argv[0]); return EXIT_FAILURE; } src = pipi_load(srcname); if(!src) { fprintf(stderr, "%s: could not load `%s'\n", argv[0], srcname); return EXIT_FAILURE; } dst = pipi_resize_bicubic(src, w, h); if(bpp == 16) pipi_dither_24to16(dst); pipi_save(dst, dstname); pipi_free(src); pipi_free(dst); return 0; } static void usage(void) { printf("Usage: genethumb [-b bpp] [-g geometry] SOURCE DESTINATION\n"); printf(" genethumb -h | --help\n"); printf("Create an image thumbnail.\n"); printf("\n"); printf("Mandatory arguments to long options are mandatory for short options too.\n"); printf(" -b, --bpp bits per pixel (32 or 16)\n"); printf(" -g, --geometry target geometry (default %ix%i)\n", DEFAULT_WIDTH, DEFAULT_HEIGHT); printf(" -h, --help display this help and exit\n"); printf("\n"); printf("Written by Sam Hocevar. Report bugs to .\n"); }