> 백엔드 개발 > PHP 튜토리얼 > PHP 이미지의 무손실 압축 문제 해결

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

黄舟
풀어 주다: 2023-03-15 17:44:01
원래의
31987명이 탐색했습니다.

이 기사에서는 이미지의 무손실 압축 문제를 해결하는 PHP 문제를 소개합니다. 자세한 내용은 다음과 같습니다.

추천 매뉴얼: php 완전 자율 학습 매뉴얼

코드는 다음과 같습니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

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번 압축하면 됩니다. , 그러면 이 포인트는 사라집니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

<?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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿