meillo@0: /* compile with: gcc -lgd -lpng -lz -ljpeg -lm resize-gd.c */ meillo@0: meillo@0: #include meillo@0: #include /* for atoi() */ meillo@0: #include meillo@0: #include "gd.h" /* Bring in the gd library functions */ meillo@0: meillo@0: meillo@0: enum { meillo@0: Png, meillo@0: Jpg, meillo@0: }; meillo@0: meillo@0: meillo@0: int main(int argc, char* argv[]) { meillo@0: int i; meillo@0: int w, h; meillo@0: int x, y; meillo@0: int type; meillo@0: gdImagePtr im_in; meillo@0: gdImagePtr im_out; meillo@0: FILE* in; meillo@0: FILE* out; meillo@0: meillo@0: if (argc < 3) { meillo@0: puts("usage: resize-gd x "); meillo@0: exit(1); meillo@0: } meillo@0: meillo@0: /* parse width and height */ meillo@0: w = atoi(argv[1]); meillo@0: h = atoi(strstr(argv[1], "x") + 1); meillo@0: printf("w: %d h: %d\n", w, h); meillo@0: meillo@0: /* process images */ meillo@0: for (i = 2; i < argc; i++) { meillo@0: printf("processing file '%s'\n", argv[i]); meillo@0: meillo@0: if (strcmp(&(argv[i][strlen(argv[i])-4]), ".png") == 0) { meillo@0: type = Png; meillo@0: } else if (strcmp(&(argv[i][strlen(argv[i])-4]), ".jpg") == 0) { meillo@0: type = Jpg; meillo@0: } else { meillo@0: fprintf(stderr, "unknown filetype\n"); meillo@0: exit(2); meillo@0: } meillo@0: meillo@0: /* Load a large png to shrink in the smaller one */ meillo@0: in = fopen(argv[i], "rb"); meillo@0: if (type == Png) { meillo@0: im_in = gdImageCreateFromPng(in); meillo@0: } else if (type == Jpg) { meillo@0: im_in = gdImageCreateFromJpeg(in); meillo@0: } meillo@0: fclose(in); meillo@0: meillo@0: im_out = gdImageCreateTrueColor(w, h); meillo@0: meillo@0: /* Now copy the large image */ meillo@0: gdImageCopyResampled(im_out, im_in, 0, 0, 0, 0, im_out->sx, im_out->sy, im_in->sx, im_in->sy); meillo@0: meillo@0: /* write out */ meillo@0: out = fopen(argv[i], "wb"); meillo@0: if (type == Png) { meillo@0: gdImagePng(im_out, out); meillo@0: } else if (type == Jpg) { meillo@0: gdImageJpeg(im_out, out, -1); meillo@0: } meillo@0: fclose(out); meillo@0: meillo@0: gdImageDestroy(im_in); meillo@0: gdImageDestroy(im_out); meillo@0: } meillo@0: meillo@0: return 0; meillo@0: }