annotate resize-gd.c @ 5:8e2804fe30bc

skipps now too small images; added --version and --help
author meillo@marmaro.de
date Sat, 14 Jun 2008 12:18:06 +0200
parents 35a50e57b6f5
children c0045d8d3ce2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
1 /*
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
2 * compile with: gcc -lgd -lpng -lz -ljpeg -lm resize-gd.c
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
3 * build-depends: libgd2-noxpm-dev | libgd2-dev
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
4 * depends: libgd2-noxpm | libgd2-xpm
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
5 *
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
6 *
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
7 *
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
8 * http://www.libgd.org/ImageCreation
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
9 * http://cpan.uwinnipeg.ca/htdocs/Image-Resize/Image/Resize.pm.html
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
10 * http://netpbm.sourceforge.net/
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
11 *
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
12 */
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
13
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
14 #include <stdio.h>
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
15 #include <stdlib.h> /* for atoi() */
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
16 #include <string.h>
1
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
17 #include <ctype.h>
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
18 #include "gd.h" /* Bring in the gd library functions */
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
19
5
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
20 #define PROGRAM "resize-gd"
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
21 #define VERSION "0.1"
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
22
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
23 enum {
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
24 Png,
3
35a50e57b6f5 removes some compiler warnings
meillo@marmaro.de
parents: 2
diff changeset
25 Jpg
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
26 };
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
27
2
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
28 struct size {
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
29 int w;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
30 int h;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
31 };
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
32
2
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
33
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
34 void
5
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
35 version() {
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
36 printf("%s version: %s\n", PROGRAM, VERSION);
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
37 }
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
38
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
39
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
40 void
2
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
41 usage() {
5
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
42 printf("\
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
43 usage: %s <size> <imagefiles> [...]\n\
2
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
44 (keeps aspect ratio, does not enlarge images)\n\
5
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
45 %s <width>x<height> <imagefiles> [...]\n\
2
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
46 (resizes to that size, enlarges if needed)\n\
5
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
47 ", PROGRAM, PROGRAM);
2
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
48 }
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
49
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
50
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
51 struct size
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
52 calcsize(struct size opt, struct size img, int enlarge) {
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
53 struct size result;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
54
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
55 if (opt.h <= 0) {
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
56 /* keep aspect ratio */
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
57 if (!enlarge && opt.w > img.w && opt.w > img.h) {
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
58 opt.w = (img.w > img.h) ? img.w : img.h;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
59 }
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
60 if (img.w > img.h) {
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
61 result.w = opt.w;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
62 result.h = opt.w * (1.0 * img.h / img.w);
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
63 } else {
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
64 result.h = opt.w;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
65 result.w = opt.w * (1.0 * img.w / img.h);
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
66 }
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
67 } else {
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
68 result = opt;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
69 }
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
70 return result;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
71 }
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
72
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
73
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
74 int
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
75 validsize(char* sp) {
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
76 while (isdigit(*sp)) {
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
77 sp++;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
78 }
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
79 if (*sp == 'x' && isdigit(*(sp+1))) {
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
80 sp++;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
81 while (isdigit(*sp)) {
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
82 sp++;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
83 }
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
84 }
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
85 if (*sp != '\0') {
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
86 return 0;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
87 }
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
88 return 1;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
89 }
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
90
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
91
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
92 int
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
93 main(int argc, char* argv[]) {
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
94 int i;
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
95 int type;
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
96 gdImagePtr im_in;
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
97 gdImagePtr im_out;
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
98 FILE* in;
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
99 FILE* out;
2
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
100 char* c;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
101 struct size sizeopt, sizeimg, sizedest;
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
102
5
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
103 if (argc == 2 && strcmp(argv[1], "--version") == 0) {
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
104 version();
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
105 exit(0);
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
106 }
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
107 if (argc == 2 && strcmp(argv[1], "--help") == 0) {
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
108 version();
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
109 usage();
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
110 exit(0);
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
111 }
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
112 if (argc < 3) {
2
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
113 usage();
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
114 exit(1);
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
115 }
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
116
2
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
117 if (!validsize(argv[1])) {
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
118 fprintf(stderr, "Invalid form of size. Has to be <size> or <width>x<height>.\n");
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
119 usage();
5
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
120 exit(2);
2
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
121 }
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
122
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
123 /* parse width and height */
2
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
124 sizeopt.w = atoi(argv[1]);
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
125 c = strstr(argv[1], "x");
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
126 if (c && c[1] != '\0') {
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
127 sizeopt.h = atoi(c + 1);
1
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
128 } else {
2
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
129 sizeopt.h = -1; /* keep aspect ratio */
1
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
130 }
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
131
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
132
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
133 /* process images */
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
134 for (i = 2; i < argc; i++) {
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
135 printf("processing file '%s'\n", argv[i]);
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
136
1
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
137 if (strcmp(argv[i]+strlen(argv[i])-4, ".png") == 0) {
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
138 type = Png;
1
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
139 } else if (strcmp(argv[i]+strlen(argv[i])-4, ".jpg") == 0) {
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
140 type = Jpg;
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
141 } else {
1
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
142 fprintf(stderr, "'%s' has unknown filetype. Filename must end with (lowercase) '.png' or '.jpg'.\n", argv[i]);
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
143 continue;
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
144 }
1
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
145 /* load image */
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
146 in = fopen(argv[i], "rb");
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
147
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
148 if (type == Png) {
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
149 im_in = gdImageCreateFromPng(in);
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
150 } else if (type == Jpg) {
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
151 im_in = gdImageCreateFromJpeg(in);
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
152 }
1
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
153 /*
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
154 if ((im_in = gdImageCreateFromPng(in)) != NULL) {
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
155 type = Png;
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
156 } else if ((im_in = gdImageCreateFromJpeg(in)) != NULL) {
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
157 type = Jpg;
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
158 } else {
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
159 fprintf(stderr, "'%s' has unknown filetype. Filename must end with (lowercase) '.png' or '.jpg'.\n", argv[i]);
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
160 continue;
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
161 }
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
162 */
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
163
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
164 fclose(in);
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
165
2
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
166 /* calculate target size */
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
167 sizeimg.w = im_in->sx;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
168 sizeimg.h = im_in->sy;
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
169 sizedest = calcsize(sizeopt, sizeimg, 0);
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
170
5
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
171 /* skip images that dont need to be resized */
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
172 if (sizedest.w == sizeimg.w && sizedest.h == sizeimg.h) {
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
173 gdImageDestroy(im_in);
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
174 continue;
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
175 }
8e2804fe30bc skipps now too small images; added --version and --help
meillo@marmaro.de
parents: 3
diff changeset
176
1
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
177 /* copy-resize the image */
2
8e71b54b6e1e made separate functions for calcsize and usage; pictures are not enlarged by default
meillo@marmaro.de
parents: 1
diff changeset
178 im_out = gdImageCreateTrueColor(sizedest.w, sizedest.h);
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
179 gdImageCopyResampled(im_out, im_in, 0, 0, 0, 0, im_out->sx, im_out->sy, im_in->sx, im_in->sy);
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
180
1
7a8f72b27dc3 added keep aspect ratio; validated size
meillo@localhost.localdomain
parents: 0
diff changeset
181 /* write image */
0
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
182 out = fopen(argv[i], "wb");
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
183 if (type == Png) {
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
184 gdImagePng(im_out, out);
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
185 } else if (type == Jpg) {
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
186 gdImageJpeg(im_out, out, -1);
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
187 }
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
188 fclose(out);
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
189
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
190 gdImageDestroy(im_in);
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
191 gdImageDestroy(im_out);
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
192 }
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
193
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
194 return 0;
8c94239b3b3f initial commit (provides basic funcionality)
meillo@localhost.localdomain
parents:
diff changeset
195 }