2010-11-22 18 views
0

問題:スクリプトが遅く実行されているようです。このスクリプトは、異なる画像サイズに対して4回実行される関数の中にあります。下のコードをスピードアップする方法はありますか? PHPの家族にコアと非常にスピーディーでイメージのサイズ変更のスピードアップ

$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

これは本当に信じがたいです。あなたは100%確信していますか?それがボトルネックであれば何かが間違っているはずです –

+0

getimagesizeは遅い部分だったようですが、画像のサイズを変更する方法かもしれないと思います。より多くの情報で投稿を更新しました。 – stwhite

+0

'imagecopyresampled()'はこのコードでは最も遅い関数であり、実行時間全体の44%ですが、正常なようです。 –

答えて

0

使用ImageMagick、。

+1

GDの機能は、コンパイルされたCベースのライブラリにもあります - ImageMagickはいくらか高速です(そして他の面もありますが)。 –

+0

私が言っていることは、それを使うと構文の多くが不要になるということです(全てが組み込まれているので)。 –

+0

これは、ライブラリを切り替えるのではなく、画像のサイズ変更のスピードを上げる方法が必要なようです。 – stwhite

関連する問題