iT邦幫忙

0

超過一定大小就按照比例縮圖,但卻會模糊? PHP GD

$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了
有經驗的大大是如何解決
或是有更好的方式?

fillano iT邦超人 1 級 ‧ 2019-08-10 07:31:20 檢舉
jpeg是破壞性壓縮,品質100只是說不做破壞性壓縮而已,跟縮圖的品質沒關係。

2 個回答

2
淺水員
iT邦新手 3 級 ‧ 2019-08-09 16:48:29
最佳解答

如果允許安裝其他的 extension 的話
可以參考:PHP: imageMagick

然後了解一下縮放圖片的演算法
不同的演算法對縮圖的品質會有不同的影響
(以縮圖來說一般會用 Lanczos)

真的深入研究也許還要考慮銳化,不過先用 Lanczos 試試看吧?

PS. 剛剛找到一個 demo+範例程式碼 的網頁。


補充:如果圖片是客戶端上傳的話,是不是也能考慮直接在前端縮圖呢?看是用 canvas 或是用外部的函式庫。

看更多先前的回應...收起先前的回應...
小松菜奈 iT邦研究生 4 級 ‧ 2019-08-10 11:39:19 檢舉

/images/emoticon/emoticon32.gif

小松菜奈 iT邦研究生 4 級 ‧ 2019-08-14 13:59:43 檢舉

要怎麼知道有沒有安裝 imageMagick?
目前需要的環境有三種
imac (內建)
macbook (XAMPP)
ubuntu (linode)

小松菜奈 iT邦研究生 4 級 ‧ 2019-08-14 14:01:02 檢舉

太好了 ubuntu 用 php7.3-imagick 就可以安裝~

小松菜奈 iT邦研究生 4 級 ‧ 2019-08-16 19:07:16 檢舉

我安裝了(包括在開發環境MAC)但要怎麼引用他啊?

小松菜奈 iT邦研究生 4 級 ‧ 2019-08-16 19:22:44 檢舉
0
浩瀚星空
iT邦大師 1 級 ‧ 2019-08-09 16:33:19

不要用gd。gd處理出來的圖一定不會比原來的好。
如果真有這樣的要求。一般就兩個做法。

1.不做gd縮圖,直托從css中處理。當然這樣會有容量下載的問題存在。載入頁面會慢點。

2.用另外比gd好的圖片處理元件。映像中有image啥的可以用。但要在主機先安裝好元件才行,預設沒安裝這東西。

我要發表回答

立即登入回答