首頁 >後端開發 >PHP問題 >php如何實現圖片壓縮不失真

php如何實現圖片壓縮不失真

藏色散人
藏色散人原創
2020-08-21 09:51:504260瀏覽

php圖片壓縮不失真的實作方法:先設定圖片壓縮比;然後透過「getimagesize」函數取得原圖尺寸;最後使用「imagecopyresampled」函數壓縮圖片即可。

php如何實現圖片壓縮不失真

推薦:《PHP影片教學》 

PHP解決圖片無損壓縮

程式碼如下:

header("Content-type: image/jpeg");
$file = "111.jpg";
$percent = 1.5;  //图片压缩比
list($width, $height) = getimagesize($file); //获取原图尺寸
//缩放尺寸
$newwidth = $width * $percent;
$newheight = $height * $percent;
$src_im = imagecreatefromjpeg($file);
$dst_im = imagecreatetruecolor($newwidth, $newheight);
imagecopyresized($dst_im, $src_im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagejpeg($dst_im); //输出压缩后的图片
imagedestroy($dst_im);
imagedestroy($src_im);

我發現用php的imagecopyresized把大圖片縮成小圖片時,圖片會變得很模糊,這時候要提升清晰度不如用imagecopyresampled 代替imagecopyresized也許會更好。

註:壓縮有損失是必然的,看的清楚與否實際上就是是否接受這個範圍的問題.比如你圖像上原圖有些點是2px,但是你壓縮5倍,那麼這些點就會消失。

<?php 
/** 
* desription 压缩图片 
* @param sting $imgsrc 图片路径 
* @param string $imgdst 压缩后保存路径 
*/
function image_png_size_add($imgsrc,$imgdst){ 
  list($width,$height,$type)=getimagesize($imgsrc); 
  $new_width = ($width>600?600:$width)*0.9; 
  $new_height =($height>600?600:$height)*0.9; 
  switch($type){ 
    case 1: 
      $giftype=check_gifcartoon($imgsrc); 
      if($giftype){ 
        header(&#39;Content-Type:image/gif&#39;); 
        $image_wp=imagecreatetruecolor($new_width, $new_height); 
        $image = imagecreatefromgif($imgsrc); 
        imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
        imagejpeg($image_wp, $imgdst,75); 
        imagedestroy($image_wp); 
      } 
      break; 
    case 2: 
      header(&#39;Content-Type:image/jpeg&#39;); 
      $image_wp=imagecreatetruecolor($new_width, $new_height); 
      $image = imagecreatefromjpeg($imgsrc); 
      imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
      imagejpeg($image_wp, $imgdst,75); 
      imagedestroy($image_wp); 
      break; 
    case 3: 
      header(&#39;Content-Type:image/png&#39;); 
      $image_wp=imagecreatetruecolor($new_width, $new_height); 
      $image = imagecreatefrompng($imgsrc); 
      imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
      imagejpeg($image_wp, $imgdst,75); 
      imagedestroy($image_wp); 
      break; 
  } 
} 
/** 
* desription 判断是否gif动画 
* @param sting $image_file图片路径 
* @return boolean t 是 f 否 
*/
function check_gifcartoon($image_file){ 
  $fp = fopen($image_file,&#39;rb&#39;); 
  $image_head = fread($fp,1024); 
  fclose($fp); 
  return preg_match("/".chr(0x21).chr(0xff).chr(0x0b).&#39;NETSCAPE2.0&#39;."/",$image_head)?false:true; 
} 
?>

以上是php如何實現圖片壓縮不失真的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn