webForumDet fria alternativet

Bilder tar lång tid att ladda genom thumbnail

PHP

2 svar · 289 visningar · startad av Melea

Medlem sedan juli 20033 147 inlägg
Frågan#1

Hej,
jag har denna kod för att förminska bilder i mitt fotogalleri.

<?
$maxheight = 150;
$maxwidth = 150;
$imgquality = 50;

if (!isset($_GET['picture']) || !file_exists($_GET['picture'])) {
    exit;
}

$img_x_y_size =  getimagesize($_GET['picture']);

switch($img_x_y_size[2]) {
case 1:
	header("Content-type: image/gif");
	$imgres = ImageCreateFromGif($_GET['picture']);
	break;
case 2:
	header("Content-type: image/jpeg");
	$imgres = ImageCreateFromJpeg($_GET['picture']);
	break;
case 3:
	header("Content-type: image/png");
	$imgres = ImageCreateFromPng($_GET['picture']);
	break;
}

$imgwidth = imagesx($imgres);
$imgheight = imagesy($imgres);

$procentwidth = $maxwidth / $imgwidth;
$procentheight = $maxheight / $imgheight;

if ($procentwidth > $procentheight) {
    $newwidth = round($imgwidth * $procentwidth);
    $newheight = round($imgheight * $procentwidth);
} else {
    $newwidth = round($imgwidth * $procentheight);
    $newheight = round($imgheight * $procentheight);
}

if ($maxwidth < $img_x_y_size[0]) {
	$thumbres = ImageCreateTrueColor($newwidth, $newheight);
} else {
	$thumbres = ImageCreateTrueColor($img_x_y_size[0], $img_x_y_size[1]);
}

if ($maxwidth < $img_x_y_size[0]) {
	ImageCopyResampled($thumbres, $imgres, 0, 0, 0, 0, $newwidth, $newheight, $imgwidth, $imgheight);
} else {
	ImageCopyResampled($thumbres, $imgres, 0, 0, 0, 0, $img_x_y_size[0], $img_x_y_size[1], $img_x_y_size[0], $img_x_y_size[1]);
}

ImageDestroy($imgres);

switch($img_x_y_size[2]) {
case 1:
	ImageGif($thumbres, "", $imgquality);
	break;
case 2:
	ImageJpeg($thumbres, "", $imgquality);
	break;
case 3:
	ImagePng($thumbres, "", $imgquality);
	break;
}

ImageDestroy($thumbres);
?>

Men när jag öppnar bilderna genom koden tar det ca. 1 sekund/bild att ladda, vilket är otroligt långsamt.
Vad kan jag göra för att snabba på detta?

MVH
Jonas

Medlem sedan sep. 200522 inlägg
#2

Den långsamma hastigheten kan både bero på koden och på din servers prestanda. Tänk på att om det är stora bilder så skall först server öppna dom, beräkna storlek, beräkna thumbnail, göra till thumbnail så om du kör en dålig server så kan du förvänta dig dåligt resultat.

Medlem sedan maj 2005562 inlägg
#3

om du sparar undan thumbnailsen i en speciell mapp och sedan kontrollerar om filen redan finns först .. kommer gå mkt snabbare

själv använder jag mig av följande .. vilket fungerar fint

<?php
function isThumb ($file) {
	global $dir;
	if (!file_exists($dir . ".thumbs/"))
		if (!mkdir($dir . ".thumbs/"))
			die ("Unable to create thumbs directory<br />\nCheck permissions and try again");
	
	if (!is_readable($dir . ".thumbs/" . $file)) {
		if (createThumb($file))
			return true;
	}
	else 
		return true;
}?>
257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)