Hoi allemaal,
Ik heb een script gemaakt dat een directory afgaat en zoekt naar afbeeldingen, vervolgens wordt er gecontroleerd of de breedte niet groter is dan het max. (wat is in te stellen) indien dit wel zo is dan wordt het verkleind.
Vervolgens wordt als het bestand niet verkleind is de afbeelding omgezet in het png formaat (persoonlijke voorkeur) en wordt er een thumbnail van gemaakt. Dit alles wordt vervolgens naar een directory gekopieerd waar een foto-album script in kijkt.
Nu heb ik even getest met 5 afbeeldingen van redelijke grootte en het kost ruim 4 seconden om dit alles te doen. Dit vind ik persoonlijk nogal traag echter het is natuurlijk een eenmalig proces dus dat scheelt.
Hier wat functies die ik gebruik:
Hier het eigenlijke script:
Hoort dit zo lang te duren of kan iemand iets vinden waardoor het significant sneller zou kunnen gaan?
Ik heb een script gemaakt dat een directory afgaat en zoekt naar afbeeldingen, vervolgens wordt er gecontroleerd of de breedte niet groter is dan het max. (wat is in te stellen) indien dit wel zo is dan wordt het verkleind.
Vervolgens wordt als het bestand niet verkleind is de afbeelding omgezet in het png formaat (persoonlijke voorkeur) en wordt er een thumbnail van gemaakt. Dit alles wordt vervolgens naar een directory gekopieerd waar een foto-album script in kijkt.
Nu heb ik even getest met 5 afbeeldingen van redelijke grootte en het kost ruim 4 seconden om dit alles te doen. Dit vind ik persoonlijk nogal traag echter het is natuurlijk een eenmalig proces dus dat scheelt.
Hier wat functies die ik gebruik:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
| <?php function convertjpgtopng ($src_image, $dst_image) { global $orig_width, $orig_height; $orig_image = imagecreatefromjpeg ($src_image); imagepng ($orig_image, $dst_image); imagedestroy ($orig_image); } function imageresizefromjpg ($src_image, $dst_image) { global $orig_width, $orig_height, $new_width; $new_height = round (($orig_height * $new_width) / $orig_width); $orig_image = imagecreatefromjpeg ($src_image); $new_image = imagecreatetruecolor ($new_width, $new_height); imagecopyresampled ($new_image, $orig_image, 0, 0, 0, 0, $new_width, $new_height, $orig_width, $orig_height); imagepng ($new_image, $dst_image); imagedestroy ($orig_image); imagedestroy ($new_image); } function imageresizefrompng ($src_image, $dst_image) { global $orig_width, $orig_height, $new_width; $new_height = round (($orig_height * $new_width) / $orig_width); $orig_image = imagecreatefrompng ($src_image); $new_image = imagecreatetruecolor ($new_width, $new_height); imagecopyresampled ($new_image, $orig_image, 0, 0, 0, 0, $new_width, $new_height, $orig_width, $orig_height); imagepng ($new_image, $dst_image); imagedestroy ($orig_image); imagedestroy ($new_image); } function imagesize ($image) { $info = getimagesize ($image); $width = $info[0]; $height = $info[1]; } function imagetype ($image) { $imageinfo = exif_imagetype ($image); if ($imageinfo == 2) { return "jpg"; } elseif ($imageinfo == 3) { return "png"; } else { return FALSE; } } ?> |
Hier het eigenlijke script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
| <?php function getmicrotime() { list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); } $time_start = getmicrotime(); error_reporting (E_ALL); require ("imagefunctions.php"); // Config $thumb_width = 150; // Define width of thumbnail in pixels. We don't care about height, it will scale automatically. $maxwidth = 800; // Maximum width of full screen image in pixels. // End Config // Show this first so that people can specify the album name they want to create if (!isset ($_POST['submit'])) { ?> <html> <head> <title>Generate album</title> </head> <body> <form method="post" action="upload.php"> <input type="hidden" name="submit" value="1" /> Please specify the name of the album:<br /> <input type="text" name="albumname" size="25" maxlength="40" /> <input type="submit" value="Send" /> </form> </body> </html> <?php } // Check if people have submitted the album name and continue if so if (isset ($_POST['submit']) && $_POST['submit'] == 1) { $albumname = $_POST['albumname']; // Initialize counter for creating file names later on $num = 0; // Create directory for album if (mkdir ($albumname, 0775)) { echo "<b>Info: </b>Albumdirectorie is aangemaakt...<br /><br />\n"; } else { echo "<b>Fout: </b>Albumdirectorie kon niet worden aangemaakt.<br />Misschien bestaat de directorie al of heb je niet genoeg rechten.<br /><br />\n"; // If can't create directory => abort die (); } // Open directory handler if ($uploaddir = opendir ("uploads")) { // Walk trough directory while (false !== $file = readdir ($uploaddir)) { if ($file != "." && $file != "..") { // Skip common linux files // Fetch image type and validate list ($orig_width, $orig_height, $ext, $attr) = getimagesize ("uploads/" . $file); echo $orig_width . "<br />" . $orig_height . "<br />" . $ext . "<br />"; switch ($ext) { case "jpg" || "png"; $valid = TRUE; break; case FALSE; echo "<b>Fout: </b>" . $file . " is geen afbeelding.<br />\n"; $valid = FALSE; break; } // When valid, check width and adjust if needed. Copy to destination dir if adjusted if ($valid) { if ($orig_width > $maxwidth) { echo "<b>Info: </b>" . $file . " is groter dan de max. breedte, dit zal worden aangepast.<br />\n"; $resize = TRUE; $new_width = $maxwidth; switch ($ext) { case "jpg"; imageresizefromjpg ("uploads/" . $file, $albumname . "/" . $num . ".png"); break; case "png"; imageresizefrompng ("uploads/" . $file, $albumname . "/" . $num . ".png"); break; } unset ($new_width); $resized = TRUE; } // If image hasn't been resized, copy it to destination dir. if (!isset ($resized)) { switch ($ext) { case "png"; if (!copy ("uploads/" . $file, $albumname . "/" . $num . ".png")) { echo "<b>Fout: </b>Kon bestand niet kopieren naar albumdirectorie.<br />\n"; die (); } break; case "jpg"; convertjpgtopng ("uploads/" . $file, $albumname . "/" . $num . ".png"); break; } } // Create thumbnails and copy to destination dir $new_width = $thumb_width; switch ($ext) { case "jpg"; imageresizefromjpg ("uploads/" . $file, $albumname . "/" . $num . ".thumb.png"); break; case "png"; imageresizefrompng ("uploads/" . $file, $albumname . "/" . $num . ".thumb.png"); break; } // Output succes message and increase file name number echo "<b>Info :</b> " . $file . " is succesvol in het album gezet.<br /><br />\n"; $num++; } // End if ($valid bla } // End if ($file != "." bla } // End while ($file bla) } // End if (opendir bla) else { echo "<b>Fout: </b>Kon de uploaddirectorie niet openen. Controleer de rechten...<br /><br />\n"; } } $time_end = getmicrotime(); $time = $time_end - $time_start; echo "Uitvoeren van script kostte {$time} seconden"; ?> |
Hoort dit zo lang te duren of kan iemand iets vinden waardoor het significant sneller zou kunnen gaan?