>  기사  >  백엔드 개발  >  PHP 이미지의 무손실 압축 문제 해결

PHP 이미지의 무손실 압축 문제 해결

黄舟
黄舟원래의
2018-05-15 15:42:3731885검색

이 기사에서는 이미지의 무손실 압축 문제를 해결하는 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의 imagecopyresize를 사용하면 큰 이미지를 작은 이미지로 축소하면 이미지가 매우 흐려지는 것을 발견했습니다. 선명도를 높이기 위해 대신 imagecopyresampled를 사용하는 것이 더 나을 수도 있습니다. 이미지복사크기가 조정되었습니다.

참고: 압축 손실은 불가피합니다. 명확하게 볼 수 있는지 여부는 실제로 이 범위를 허용할지 여부에 대한 질문입니다. 예를 들어 이미지의 원본 이미지의 일부 지점은 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;  
}  
?>
추천 관련 기사:
1.PHP에서 이미지를 업로드하고 압축하는 방법
2.PHP가 이미지를 동일한 비율로 압축하는 방법
관련 영상 추천:
1.Dugu Jiujian (4)_PHP 영상 튜토리얼

위 내용은 PHP 이미지의 무손실 압축 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.