Explication du code pour résoudre le problème de mauvaise qualité des vignettes générées par PHP

jacklove
Libérer: 2023-04-02 18:46:01
original
1407 Les gens l'ont consulté

Cet article présente principalement des exemples de code pour résoudre les vignettes de mauvaise qualité générées par PHP. Il a une certaine valeur de référence et les amis dans le besoin peuvent s'y référer.

Je vais créer un forum récemment. Il devrait y avoir un classement sur la page d'accueil, affichant une liste des dix meilleurs utilisateurs avec le plus de commentaires. La liste contient une image miniature des derniers travaux téléchargés par le. utilisateur. Si l'image originale est utilisée, l'image sera trop grande. La page d'accueil se charge trop lentement, vous devez donc utiliser l'image miniature

ou supérieure pour utiliser la fonction imagecopyresized. médiocre, comme le montre

Plus tard, l'effet de l'utilisation d'imagecopyresampled a changé de manière significative. L'effet est comme indiqué ci-dessous

<.>Ci-joint le code complet :

/** 
* @name thum  缩略图函数 
* @param  sting  $img_name  图片路径 
* @param  int   $max_width 略图最大宽度 
* @param  int   $max_height 略图最大高度 
* @param  sting  $suffix 略图后缀(如"img_x.jpg"代表小图,"img_m.jpg"代表中图,"img_l.jpg"代表大图) 
* @return  void 
*/ 
function thum($img_name,$max_width,$max_height,$suffix){ 
    $img_infos=getimagesize($img_name); 
    $img_height=$img_infos[0];//图片高 
    $img_width=$img_infos[1];//图片宽 
    $img_extension=&#39;&#39;;//图片后缀名 
    switch($img_infos[2]){ 
      case 1: 
        $img_extension=&#39;gif&#39;; 
        break; 
      case 2: 
        $img_extension=&#39;jpeg&#39;; 
        break; 
      case 3: 
        $img_extension=&#39;png&#39;; 
        break; 
      default: 
        $img_extension=&#39;jpeg&#39;; 
        break; 
      } 
    $new_img_size=get_thum_size($img_width,$img_height,$max_width,$max_height);//新的图片尺寸 
 
    //print_r($new_img_size); 
    //die(&#39;test&#39;); 
    $img_func=&#39;&#39;;//函数名称 
    $img_handle=&#39;&#39;;//图片句柄 
    $thum_handle=&#39;&#39;;//略图图片句柄 
    switch($img_extension){ 
      case &#39;jpg&#39;: 
        $img_handle=imagecreatefromjpeg($img_name); 
        $img_func=&#39;imagejpeg&#39;; 
        break; 
      case &#39;jpeg&#39;: 
        $img_handle=imagecreatefromjpeg($img_name); 
        $img_func=&#39;imagejpeg&#39;; 
        break; 
      case &#39;png&#39;: 
        $img_handle=imagecreatefrompng($img_name); 
        $img_func=&#39;imagepng&#39;; 
        break; 
      case &#39;gif&#39;: 
        $img_handle=imagecreatefromgif($img_name); 
        $img_func=&#39;imagegif&#39;; 
        break; 
      default: 
        $img_handle=imagecreatefromjpeg($img_name); 
        $img_func=&#39;imagejpeg&#39;; 
        break; 
      } 
    /****/  
    $quality=100;//图片质量 
    if($img_func===&#39;imagepng&#39; && (str_replace(&#39;.&#39;, &#39;&#39;, PHP_VERSION)>= 512)){//针对php版本大于5.12参数变化后的处理情况 
      $quality=9; 
      }  
    /****/ 
    $thum_handle=imagecreatetruecolor($new_img_size[&#39;height&#39;],$new_img_size[&#39;width&#39;]); 
    if(function_exists(&#39;imagecopyresampled&#39;)){ 
      imagecopyresampled($thum_handle,$img_handle, 0, 0, 0, 0,$new_img_size[&#39;height&#39;],$new_img_size[&#39;width&#39;],$img_height,$img_width); 
      }else{ 
        imagecopyresized($thum_handle,$img_handle, 0, 0, 0, 0,$new_img_size[&#39;height&#39;],$new_img_size[&#39;width&#39;],$img_height,$img_width); 
      } 
    call_user_func_array($img_func,array($thum_handle,get_thum_name($img_name,$suffix),$quality)); 
    imagedestroy($thum_handle);//清除句柄 
    imagedestroy($img_handle);//清除句柄 
  } 
/** 
* @name get_thum_size 获得缩略图的尺寸 
* @param  $width 图片宽 
* @param  $height 图片高 
* @param  $max_width 最大宽度 
* @param  $maxHeight 最大高度 
* @param  array $size; 
*/ 
function get_thum_size($width,$height,$max_width,$max_height){ 
  $now_width=$width;//现在的宽度 
  $now_height=$height;//现在的高度 
  $size=array(); 
  if($now_width>$max_width){//如果现在宽度大于最大宽度 
    $now_height*=number_format($max_width/$width,4); 
    $now_width= $max_width; 
    } 
  if($now_height>$max_height){//如果现在高度大于最大高度 
    $now_width*=number_format($max_height/$now_height,4); 
    $now_height=$max_height; 
    } 
  $size[&#39;width&#39;]=floor($now_width); 
  $size[&#39;height&#39;]=floor($now_height); 
  return $size; 
  } 
/** 
*@ name   get_thum_name 获得略图的名称(在大图基础加_x) 
*/ 
function get_thum_name($img_name,$suffix){ 
    $str=explode(&#39;#&#39;,$img_name); 
    $str1=explode(&#39;.&#39;,$str[1]); 
    return $str[0].&#39;_&#39;.$suffix.&#39;.&#39;.$str1[1]; 
  }
Copier après la connexion

Résumé

Ce qui précède est l'intégralité du contenu de l'exemple de code de cet article sur la solution à la génération de vignettes de mauvaise qualité en PHP. J'espère qu'il sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci les amis pour votre soutien à ce site Web chinois php !

Articles qui pourraient vous intéresser :

Explication de la structure de données de la pile implémentée par PHP

Explication des compétences de Laravel Query Builder méthode d'appel de chaîne de superposition

Partage de l'implémentation PHP du code de séquence de Fibonacci

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal