2010-11-22 14 views
0

Problem: Skript scheint langsam zu laufen. Dieses Skript befindet sich in einer Funktion, die vier Mal für unterschiedliche Bildgrößen ausgeführt wird. Gibt es eine Möglichkeit, den unten stehenden Code zu beschleunigen?Beschleunigung der Bildgrößenanpassung

$outputFile = "../data/assets/temp.jpg"; 
$maxTempWidth = 45; 
$maxTempHeight = 45; 
$image_info = getimagesize($setXsmallNewName); 

if($image_info['mime'] == 'image/jpeg'){ 
$image = imagecreatefromjpeg($setXsmallNewName); 
}elseif($image_info['mime'] == 'image/gif'){ 
$image = imagecreatefromgif($setXsmallNewName); 
}elseif($image_info['mime'] == 'image/png'||$image_info['mime'] == 'image/x-png'){ 
    $image = imagecreatefrompng($setXsmallNewName); 
} 

$width = imagesx($image); 
$height = imagesy($image); 

if ($width > $maxTempWidth || $height > $maxTempHeight){ 
    if ($width > $height){ 
     $newwidth = $maxTempWidth; 
     $ratio = $maxTempWidth/$width; 
     $newheight = floor($height * $ratio); 

     if ($newheight > $maxTempHeight){ 
      $newheight = $maxTempHeight; 
      $ratio = $maxTempHeight/$height; 
      $newWidth = floor($width * $ratio); 
     } 
    }else{ 
     $newheight = $maxTempHeight; 
     $ratio = $maxTempHeight/$height; 
     $newwidth = floor($width * $ratio); 

     if ($newwidth > $maxTempWidth){ 
      $newwidth = $maxTempWidth; 
      $ratio = $maxTempWidth/$width; 
      $newheight = floor($height * $ratio); 
     } 
    } 
}else{ 
    $newwidth = $width; 
    $newheight = $height; 
} 
$final_image = imagecreatetruecolor($newwidth, $newheight); 
imagecopyresampled($final_image, $image, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 
+1

Das ist * wirklich * schwer zu glauben. Bist du 100% sicher? Wenn das der Engpass ist, muss etwas nicht stimmen –

+0

Es schien, dass getimagesize der langsame Teil war, aber ich denke auch, dass es die Art ist, wie ich die Bilder skaliere. Der Beitrag wurde mit weiteren Informationen aktualisiert. – stwhite

+0

'imagecopyresampled()' ist die langsamste Funktion in diesem Code, 44% der gesamten Ausführungszeit, aber es scheint normal zu sein. –

Antwort

0

Verwendung ImageMagick, der Kern der PHP-Familie und sehr schnell ist.

+1

GDs Funktionen sind auch in kompilierten, C-basierten Bibliotheken - ImageMagick ist vielleicht etwas schneller (und hat eine Reihe anderer Vorteile), aber es wird nicht unbedingt so viel sein. –

+0

Alles, was ich sagen will, ist, dass die Verwendung von viel Syntax überflüssig macht (weil alles eingebaut ist). –

+0

Es scheint so, als müsste es eine Möglichkeit geben, die Bildgrößenanpassung zu beschleunigen, anstatt Bibliotheken zu wechseln. – stwhite