Heim > Backend-Entwicklung > PHP-Problem > So erreichen Sie eine Bildkomprimierung ohne Verzerrung in PHP

So erreichen Sie eine Bildkomprimierung ohne Verzerrung in PHP

藏色散人
Freigeben: 2023-03-04 21:38:01
Original
4256 Leute haben es durchsucht

So erreichen Sie eine verzerrungsfreie PHP-Bildkomprimierung: Stellen Sie zunächst das Bildkomprimierungsverhältnis ein, ermitteln Sie dann die Originalbildgröße mit der Funktion „getimagesize“ und komprimieren Sie das Bild schließlich mit der Funktion „imagecopyresampled“.

So erreichen Sie eine Bildkomprimierung ohne Verzerrung in PHP

Empfohlen: „PHP-Video-Tutorial

PHP löst die verlustfreie Komprimierung von Bildern

Der Code lautet wie folgt:

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);
Nach dem Login kopieren

Ich habe festgestellt, dass ich PHPs imagecopyresized verwende, um ein großes Bild zu verkleinern zu klein, das Bild wird sehr verschwommen sein. Um die Klarheit zu verbessern, ist es möglicherweise besser, imagecopyresampled anstelle von imagecopyresized zu verwenden.

Hinweis: Ob Sie es deutlich sehen können oder nicht, hängt davon ab, ob Sie diesen Bereich akzeptieren. Beispielsweise sind einige Punkte des Originalbilds auf Ihrem Bild 2 Pixel groß, aber wenn Sie es fünfmal komprimieren , dann verschwinden diese Punkte.

<?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; 
} 
?>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo erreichen Sie eine Bildkomprimierung ohne Verzerrung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage