Thumbnails maken
Ik heb een probleem, ik heb een class die maakt van een afbeelding een thumbnail en zet ze als een random string in een map cache en die thumbnail word dan getoond op de website. Dit werk allemaal aardig en goed. Alleen de snelheid van het maken van de thumbnails gaat er langzaam. Als ik namelijk 15 thumnails op 1 pagina heb moet ik wel 15 seconden wachten tot de pagina getoond word.
Zo is de opbouw een beetje:
thumb::init();
thumb::setConfig('size', array(200, 126));
thumb::setConfig('method', 'crop');
thumb::setConfig('image', 'url_van_het_plaatje.jpeg');
thumb::setThumb();
en dan <img src="images/thumbs/url_van_het_plaatje.jpeg"/>
Dit is de code om thumbnails te maken:
heeft iemand enig idee hoe ik kan zorgen dat thumbnails maken sneller kan? Liefste niet met <img src="thumb.php?file=url_van_het_plaatje.jpeg" />, maar als het niet anders kan moet dat maar.
Zo is de opbouw een beetje:
thumb::init();
thumb::setConfig('size', array(200, 126));
thumb::setConfig('method', 'crop');
thumb::setConfig('image', 'url_van_het_plaatje.jpeg');
thumb::setThumb();
en dan <img src="images/thumbs/url_van_het_plaatje.jpeg"/>
Dit is de code om thumbnails te maken:
Code (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
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
<?php
public static function setThumb() {
if (self::getFile()) {
self::setResize();
self::setCrop();
self::$thumb = imagecreatetruecolor(self::$config['size'][0], self::$config['size'][1]);
if (isset(self::$config['bgcolor'])) {
imagefill(self::$thumb, 0, 0, imagecolorallocate(self::$thumb, self::$config['bgcolor'][0], self::$config['bgcolor'][1], self::$config['bgcolor'][2]));
}
self::$thumbNail = md5(self::$config['image']).self::$extention;
switch(self::$extention) {
case '.png':
$image = @imagecreatefrompng(FOLDER_UPLOADS.'/'.self::$config['image']);
imagealphablending($overlay, true);
imagesavealpha($overlay, true);
imagecopyresampled(self::$thumb, $image, self::$imageSize['marginLeft'], self::$imageSize['marginTop'], 0, 0, self::$imageSize['newWidth'], self::$imageSize['newHeight'], self::$imageSize['width'], self::$imageSize['height']);
imagepng(self::$thumb, FOLDER_CACHE.'/'.self::$thumbNail);
break;
case '.gif':
$image = @imagecreatefromgif(FOLDER_UPLOADS.'/'.self::$config['image']);
imagecopyresampled(self::$thumb, $image, self::$imageSize['marginLeft'], self::$imageSize['marginTop'], 0, 0, self::$imageSize['newWidth'], self::$imageSize['newHeight'], self::$imageSize['width'], self::$imageSize['height']);
imagegif(self::$thumb, FOLDER_CACHE.'/'.self::$thumbNail);
break;
default:
$image = @imagecreatefromjpeg(FOLDER_UPLOADS.'/'.self::$config['image']);
imagecopyresampled(self::$thumb, $image, self::$imageSize['marginLeft'], self::$imageSize['marginTop'], 0, 0, self::$imageSize['newWidth'], self::$imageSize['newHeight'], self::$imageSize['width'], self::$imageSize['height']);
imagejpeg(self::$thumb, FOLDER_CACHE.'/'.self::$thumbNail);
break;
}
imagedestroy(self::$thumb);
imagedestroy($image);
}
}
?>
public static function setThumb() {
if (self::getFile()) {
self::setResize();
self::setCrop();
self::$thumb = imagecreatetruecolor(self::$config['size'][0], self::$config['size'][1]);
if (isset(self::$config['bgcolor'])) {
imagefill(self::$thumb, 0, 0, imagecolorallocate(self::$thumb, self::$config['bgcolor'][0], self::$config['bgcolor'][1], self::$config['bgcolor'][2]));
}
self::$thumbNail = md5(self::$config['image']).self::$extention;
switch(self::$extention) {
case '.png':
$image = @imagecreatefrompng(FOLDER_UPLOADS.'/'.self::$config['image']);
imagealphablending($overlay, true);
imagesavealpha($overlay, true);
imagecopyresampled(self::$thumb, $image, self::$imageSize['marginLeft'], self::$imageSize['marginTop'], 0, 0, self::$imageSize['newWidth'], self::$imageSize['newHeight'], self::$imageSize['width'], self::$imageSize['height']);
imagepng(self::$thumb, FOLDER_CACHE.'/'.self::$thumbNail);
break;
case '.gif':
$image = @imagecreatefromgif(FOLDER_UPLOADS.'/'.self::$config['image']);
imagecopyresampled(self::$thumb, $image, self::$imageSize['marginLeft'], self::$imageSize['marginTop'], 0, 0, self::$imageSize['newWidth'], self::$imageSize['newHeight'], self::$imageSize['width'], self::$imageSize['height']);
imagegif(self::$thumb, FOLDER_CACHE.'/'.self::$thumbNail);
break;
default:
$image = @imagecreatefromjpeg(FOLDER_UPLOADS.'/'.self::$config['image']);
imagecopyresampled(self::$thumb, $image, self::$imageSize['marginLeft'], self::$imageSize['marginTop'], 0, 0, self::$imageSize['newWidth'], self::$imageSize['newHeight'], self::$imageSize['width'], self::$imageSize['height']);
imagejpeg(self::$thumb, FOLDER_CACHE.'/'.self::$thumbNail);
break;
}
imagedestroy(self::$thumb);
imagedestroy($image);
}
}
?>
heeft iemand enig idee hoe ik kan zorgen dat thumbnails maken sneller kan? Liefste niet met <img src="thumb.php?file=url_van_het_plaatje.jpeg" />, maar als het niet anders kan moet dat maar.
Gesponsorde koppelingen:
Een thumbnail genereren kan nou eenmaal wat tijd kosten. het ligt eraan hoeveel geheugen er beschikbaar is.
Ik denk dat je beter van te voren de thumbnails kunt genereren, dan belast je de gebruiker er niet mee. Je zou ook kunnen cachen, maar dat is in principe het zelfde maar dan lastiger (toch?).
Afhankelijk van hoe je je thumbs gebruikt is idd een van die twee opties de beste. Een cache is helemaal niet zo moeilijk.
De eenvoudigste optie is denk ik om alle requests door te sturen naar een PHP script dat kijkt of er al een thumb bestaat. Als dat niet het geval is wordt de thumb aangemaakt. Tot slot geeft het script een redirect naar de afbeelding.
De eenvoudigste optie is denk ik om alle requests door te sturen naar een PHP script dat kijkt of er al een thumb bestaat. Als dat niet het geval is wordt de thumb aangemaakt. Tot slot geeft het script een redirect naar de afbeelding.



