原圖為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);
*/
?>
原理簡單來說。就是展開後處理完再壓一次。
基本上會發生這樣的原因,就是在展開的過程中,有機會會比原圖大。
重新處理後再壓成jpg。並不一定會跟原圖一樣大。
依照圖片的性質來說。有時反而會變大。
其實這也可能是原圖是用90或80建立的。當展開後再用100壓縮。
一定會比較大了。但這也不適用所有的圖片解說。
如果圖片的色像系素少的情況下。有時就會沒差很多。
一般現在都不會用jpeg了。會用jpeg的大多是為了圖片小一點,不注重品質。
星大,想請問現在都是存什麼檔呢?因為png一般都比較大,所以選jpg存。
一般看客戶需求。jpg圖片容量會比較小。但圖質不會很好。
png可自由選擇3種模式來決定大小。映像是64 256 512 的樣子。
我個人目前比較喜好png256偏多。雖然跟jpg來比較的話,容量比較大。
但還是在容許的範圍內。
現在我jpg最多只會用在縮圖上了。但後期的專案其實已經完全棄用了。
所以我個人的建議直接用png吧。
Try this site https://jpegcompress.com to compress jpeg images