rev |
line source |
meillo@0
|
1 /* compile with: gcc -lgd -lpng -lz -ljpeg -lm resize-gd.c */
|
meillo@0
|
2
|
meillo@0
|
3 #include <stdio.h>
|
meillo@0
|
4 #include <stdlib.h> /* for atoi() */
|
meillo@0
|
5 #include <string.h>
|
meillo@0
|
6 #include "gd.h" /* Bring in the gd library functions */
|
meillo@0
|
7
|
meillo@0
|
8
|
meillo@0
|
9 enum {
|
meillo@0
|
10 Png,
|
meillo@0
|
11 Jpg,
|
meillo@0
|
12 };
|
meillo@0
|
13
|
meillo@0
|
14
|
meillo@0
|
15 int main(int argc, char* argv[]) {
|
meillo@0
|
16 int i;
|
meillo@0
|
17 int w, h;
|
meillo@0
|
18 int x, y;
|
meillo@0
|
19 int type;
|
meillo@0
|
20 gdImagePtr im_in;
|
meillo@0
|
21 gdImagePtr im_out;
|
meillo@0
|
22 FILE* in;
|
meillo@0
|
23 FILE* out;
|
meillo@0
|
24
|
meillo@0
|
25 if (argc < 3) {
|
meillo@0
|
26 puts("usage: resize-gd <width>x<height> <imagefiles>");
|
meillo@0
|
27 exit(1);
|
meillo@0
|
28 }
|
meillo@0
|
29
|
meillo@0
|
30 /* parse width and height */
|
meillo@0
|
31 w = atoi(argv[1]);
|
meillo@0
|
32 h = atoi(strstr(argv[1], "x") + 1);
|
meillo@0
|
33 printf("w: %d h: %d\n", w, h);
|
meillo@0
|
34
|
meillo@0
|
35 /* process images */
|
meillo@0
|
36 for (i = 2; i < argc; i++) {
|
meillo@0
|
37 printf("processing file '%s'\n", argv[i]);
|
meillo@0
|
38
|
meillo@0
|
39 if (strcmp(&(argv[i][strlen(argv[i])-4]), ".png") == 0) {
|
meillo@0
|
40 type = Png;
|
meillo@0
|
41 } else if (strcmp(&(argv[i][strlen(argv[i])-4]), ".jpg") == 0) {
|
meillo@0
|
42 type = Jpg;
|
meillo@0
|
43 } else {
|
meillo@0
|
44 fprintf(stderr, "unknown filetype\n");
|
meillo@0
|
45 exit(2);
|
meillo@0
|
46 }
|
meillo@0
|
47
|
meillo@0
|
48 /* Load a large png to shrink in the smaller one */
|
meillo@0
|
49 in = fopen(argv[i], "rb");
|
meillo@0
|
50 if (type == Png) {
|
meillo@0
|
51 im_in = gdImageCreateFromPng(in);
|
meillo@0
|
52 } else if (type == Jpg) {
|
meillo@0
|
53 im_in = gdImageCreateFromJpeg(in);
|
meillo@0
|
54 }
|
meillo@0
|
55 fclose(in);
|
meillo@0
|
56
|
meillo@0
|
57 im_out = gdImageCreateTrueColor(w, h);
|
meillo@0
|
58
|
meillo@0
|
59 /* Now copy the large image */
|
meillo@0
|
60 gdImageCopyResampled(im_out, im_in, 0, 0, 0, 0, im_out->sx, im_out->sy, im_in->sx, im_in->sy);
|
meillo@0
|
61
|
meillo@0
|
62 /* write out */
|
meillo@0
|
63 out = fopen(argv[i], "wb");
|
meillo@0
|
64 if (type == Png) {
|
meillo@0
|
65 gdImagePng(im_out, out);
|
meillo@0
|
66 } else if (type == Jpg) {
|
meillo@0
|
67 gdImageJpeg(im_out, out, -1);
|
meillo@0
|
68 }
|
meillo@0
|
69 fclose(out);
|
meillo@0
|
70
|
meillo@0
|
71 gdImageDestroy(im_in);
|
meillo@0
|
72 gdImageDestroy(im_out);
|
meillo@0
|
73 }
|
meillo@0
|
74
|
meillo@0
|
75 return 0;
|
meillo@0
|
76 }
|