Php 產生縮圖的方法
php 比較常用的有二種縮圖的方式,一種是用 gd 函式,一種是利用 imagemagick 。剛試用了二種方法,以前為了所垢病的 GD 畫質不好的情況已經有顯著的改善了,跟 imagemagick 所產生出來的縮圖已經極為接近了,其主要差異為壓縮後畫質和檔案大小方面的問題。
第一個 function 是利用 GD 來作縮圖的動作。
[code lang=“php”] $src_h){ $thumb_w = $size; $thumb_h = intval($src_h / $src_w * $size); }else{ $thumb_h = $size; $thumb_w = intval($src_w / $src_h * $size); } $thumb = imagecreatetruecolor($thumb_w, $thumb_h); // 舊方法,不過產出來的畫質效果極差 //imagecopyresized($thumb, $src, 0, 0, 0, 0, $thumb_w, $thumb_h, $src_w, $src_h); imagecopyresampled($thumb, $src, 0, 0, 0, 0, $thumb_w, $thumb_h, $src_w, $src_h); $file= array_pop(explode("/",$filename)); imagejpeg($thumb, “/tmp/thumb/i-$size-”.$file); } ?> [/code]
利用 imagecopyresampled 轉出來的效果:
利用 imagecopyresized 轉出來的效果:
在 php 手冊上寫 imagecopyresampled 和 imagecopyresized 主要的不同點如下,就是讓他畫質更好,更接近原色:
imagecopyresampled() copies a rectangular portion of one image to another image, smoothly interpolating pixel values so that, in particular, reducing the size of an image still retains a great deal of clarity
這個 function 是利用 imagemagick 作轉檔的動作: [code lang=“php”] [/code]
下面為利用 imagemagick 產出縮圖的效果。
整體來說 imagemagick 轉出來的畫質是比較好的,檔案也比 gd 轉出來的小一點,而且我 gd 必需使用到壓縮比到 90 才會和 imagemagick 轉出來的效果一樣。 imagecopyresampled() 和 imagecopyresized() 的差異更明顯了,跟本不需要考慮使用 imagecopyresized() ,除非是使用 gif ,否則只有 imagecopyresampled 可以看而已。