$width_size = 1000;
list($width, $height, $type_no) = getimagesize($imgSource);
if ($width > $width_size) {
$ratio = $width / $height;
if ($ratio > 1) {
$newWidth = $width_size;
$newHeight = $width_size / $ratio;
} else {
$newWidth = $width_size * $ratio;
$newHeight = $width_size;
}
} else {
$newWidth = $width;
$newHeight = $height;
}
是依照以上的方式比例縮小
發現假設 2000 寬的照片縮小成 1000 卻會模糊?!
尤其是 jpg 檔
header('Content-Type:image/jpeg');
$imageWp = imagecreatetruecolor($newWidth, $newHeight);
$image = imagecreatefromjpeg($imgSource);
imagecopyresampled($imageWp, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
imagejpeg($imageWp, $imgReader, 100);
imagedestroy($imageWp);
品質已經調整100了
有經驗的大大是如何解決
或是有更好的方式?
如果允許安裝其他的 extension 的話
可以參考:PHP: imageMagick
然後了解一下縮放圖片的演算法
不同的演算法對縮圖的品質會有不同的影響
(以縮圖來說一般會用 Lanczos)
真的深入研究也許還要考慮銳化,不過先用 Lanczos 試試看吧?
PS. 剛剛找到一個 demo+範例程式碼 的網頁。
補充:如果圖片是客戶端上傳的話,是不是也能考慮直接在前端縮圖呢?看是用 canvas 或是用外部的函式庫。
不要用gd。gd處理出來的圖一定不會比原來的好。
如果真有這樣的要求。一般就兩個做法。
1.不做gd縮圖,直托從css中處理。當然這樣會有容量下載的問題存在。載入頁面會慢點。
2.用另外比gd好的圖片處理元件。映像中有image啥的可以用。但要在主機先安裝好元件才行,預設沒安裝這東西。