iT邦幫忙

0

imagejpeg 品質設定100

  • 分享至 

  • xImage

原圖為jpg檔,希望在php裡實現選轉,尺寸不變,品質設定100,存成jpg檔,為何檔案大小會變大很多呢? 謝謝

<?php
    $img="base64  jpeg";
    $img = str_replace('data:image/jpeg;base64,','', $img);// 需注意 data url 格式 與來源是否相符 ex:image/jpeg
    $data = base64_decode($img);//解base64碼


    $path = $data ;   //取得檔案的絕對位置(陣列)
    $source = imagecreatefromstring($path);   //新建圖檔
    $org_info = getimagesizefromstring($path);        //取得圖檔資訊,此為陣列[0]=width,[1]=height,[3]=width & height

    $destination = imagecreatetruecolor($org_info[0],$org_info[1]);    //新建一個新尺寸圖檔
    imagecopyresampled($destination,$source,0,0,0,0,$org_info[0],$org_info[1],$org_info[0],$org_info[1]);//複製新建圖檔

    $bgColor = imagecolorallocatealpha($destination, 255, 255, 255, 127);
    $degrees = 90;
    $rotate = imagerotate($destination, $degrees, 0);

    //$r_name = $_FILES['file']['name'];
    $r_path = '../files/images'. uniqid().'.jpg';
    imagejpeg($rotate,$r_path,100);                //暫存圖檔 品質為100,0~100

/*
    $file = '../files/images'. uniqid().'.jpg';//檔名 包含資料夾路徑 請記得此資料夾需 777 權限 方可寫入圖檔
    $success = file_put_contents($file, $data);
    */
?>
看更多先前的討論...收起先前的討論...
想說前兩天有類似的問題,結果那個問的是 canvas
豬豬人 iT邦新手 4 級 ‧ 2019-11-25 16:48:47 檢舉
那個也是我問的, 現在換imagejpeg() 有問題,希望可以多了解原因
harrytsai iT邦新手 1 級 ‧ 2019-11-25 17:58:54 檢舉
我只知道只要圖檔被打開另存,就會變小,除非你是不開檔的狀態下,就不會被壓縮到
ccutmis iT邦高手 2 級 ‧ 2019-11-25 18:03:05 檢舉
這個應該是跟PHP程式無關 跟JPEG的壓縮取樣原理有關
底下是相關的討論
https://photo.stackexchange.com/questions/50789/why-does-simply-saving-a-jpeg-at-100-quality-in-photoshop-increase-filesize

如果你上傳JPEG不希望品質跟SIZE增加,可以試試存為PNG檔,而不是重新用imagejpeg()又給它壓縮一次。(白話來說就是每次生成jpeg就會比原圖糊一點,你拿jpeg檔又給它生成jpeg圖就是糊上加糊....)
fillano iT邦超人 1 級 ‧ 2019-11-26 14:42:01 檢舉
http://www.robertstocker.co.uk/jpeg/jpeg_new_1.htm 這系列文章寫得蠻詳細,可以參考看看。有兩個無法復原的過程:
1. Jpeg Chroma sampling
2. Jpeg Quantization,品質參數是在這個階段影響處理過程
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0

原理簡單來說。就是展開後處理完再壓一次。
基本上會發生這樣的原因,就是在展開的過程中,有機會會比原圖大。
重新處理後再壓成jpg。並不一定會跟原圖一樣大。
依照圖片的性質來說。有時反而會變大。

其實這也可能是原圖是用90或80建立的。當展開後再用100壓縮。
一定會比較大了。但這也不適用所有的圖片解說。

如果圖片的色像系素少的情況下。有時就會沒差很多。

一般現在都不會用jpeg了。會用jpeg的大多是為了圖片小一點,不注重品質。

看更多先前的回應...收起先前的回應...
豬豬人 iT邦新手 4 級 ‧ 2019-11-26 09:53:31 檢舉

星大,想請問現在都是存什麼檔呢?因為png一般都比較大,所以選jpg存。

一般看客戶需求。jpg圖片容量會比較小。但圖質不會很好。
png可自由選擇3種模式來決定大小。映像是64 256 512 的樣子。
我個人目前比較喜好png256偏多。雖然跟jpg來比較的話,容量比較大。
但還是在容許的範圍內。

現在我jpg最多只會用在縮圖上了。但後期的專案其實已經完全棄用了。
所以我個人的建議直接用png吧。

豬豬人 iT邦新手 4 級 ‧ 2019-11-26 15:32:25 檢舉

星大 想請問一般圖片會做成一張大圖 一張小圖。目前我是使用canvas在前台把圖片壓縮成較小張的大圖,再到後台存大圖及用PHP壓縮一張小圖儲存。想請問一般是像我這樣做還是大小圖都在前台製作,然後直接將圖傳入後台儲存呢?

淺水員 iT邦大師 6 級 ‧ 2019-11-26 17:35:37 檢舉

其實前端也可以旋轉圖片。
至於前後端哪邊處理圖片比較好就等比較有經驗的前輩回答了。

這說真的,並沒有一定的答案說。
我記得我有一篇也有回答同樣的問題才對。

正常來說,我個人的做法是將圖送來後台處理居多。
不過我並不會說這樣是最好的做法,是因為我習慣這樣的做法。

前台canvas只有做裁切動作我才會用其圖片。要不然正常只拿它當預覽及處理特效。單純的大小縮放。我比較不會用前端處理。

0
tylergloria
iT邦見習生 ‧ 2022-10-10 14:02:01

Try this site https://jpegcompress.com to compress jpeg images

我要發表回答

立即登入回答