如何解决织梦DedeCms缩略图不拉伸变形的方法

其实旅行最大的好处,不是能见到多少人,见过多美的风景,而是走着走着,在一个际遇下,突然重新认识了自己。

织梦目前几个最新版本的缩略图生成方式都是采用缩小或拉伸的方式进行完整显示,如果使用的图片和缩略图所显示的比例不一致的话,会使得缩略图拉伸变形。如果不改变织梦目前的缩略图显示方式的话,又想缩略图不拉伸变形显示,就得制作一个和显示缩略图位置大小一致或者图片比例一致且大于缩略图的分辨率就会不拉伸变形了。

我们可以通过下面方法修改实现,对图片进行按宽或高进行放缩,超过缩略图大小的部分再进行裁剪,这样生成的缩略图的显示效果要比原来的要好得多了。同时也可以采取之际制作好分辨率一致的缩略图进行显示。

于是重新修改了一下DedeCms v5.6缩略图生成方法。

默认dedecms5.6默认生成的缩略图,缩略图大小设置为:100*100(直接把图片缩小了)

看起来很不美观,影响了图片的观赏性

DedeCms v5.6缩略图裁剪优化方法

修改如下:

打开/includes/image.func.php文件,

//缩图片自动生成函数,来源支持bmp、gif、jpg、png
//但生成的小图只用jpg或png格式

找到代码第44行function ImageResize

//获得GD的版本之间的代码,用如下的代码覆盖(大家请注意备份)。

  1. function ImageResize($srcFile,$toW,$toH,$toFile="")  
  2. {  
  3. global $cfg_photo_type;  
  4. if($toFile=="")  
  5. {  
  6.    $toFile = $srcFile;  
  7. }  
  8. $info = "";  
  9. $srcInfo = GetImageSize($srcFile,$info);  
  10. switch ($srcInfo[2])  
  11. {  
  12.    case 1:  
  13.     if(!$cfg_photo_type['gif'])  
  14.     {  
  15.      return false;  
  16.     }  
  17.     $im = imagecreatefromgif($srcFile);  
  18.     break;  
  19.    case 2:  
  20.     if(!$cfg_photo_type['jpeg'])  
  21.     {  
  22.      return false;  
  23.     }  
  24.     $im = imagecreatefromjpeg($srcFile);  
  25.     break;  
  26.    case 3:  
  27.     if(!$cfg_photo_type['png'])  
  28.     {  
  29.      return false;  
  30.     }  
  31.     $im = imagecreatefrompng($srcFile);  
  32.     break;  
  33.    case 6:  
  34.     if(!$cfg_photo_type['bmp'])  
  35.     {  
  36.      return false;  
  37.     }  
  38.     $im = imagecreatefromwbmp($srcFile);  
  39.     break;  
  40. }  
  41. $srcW=ImageSX($im);  
  42. $srcH=ImageSY($im);  
  43. if($srcW<=$toW && $srcH<=$toH )  
  44. {  
  45.    return true;  
  46. }  
  47. //缩略生成并裁剪  
  48. $newW = $toH * $srcW / $srcH;  
  49.            $newH = $toW * $srcH / $srcW;  
  50. if($newH >= $toH)  
  51. {  
  52.    $ftoW = $toW;  
  53.    $ftoH = $newH;  
  54. }  
  55. else 
  56. {  
  57.                      $ftoW = $newW;  
  58.    $ftoH = $toH;  
  59. }  
  60.            if($srcW>$toW||$srcH>$toH)  
  61. {  
  62.    if(function_exists("imagecreatetruecolor"))  
  63.    {  
  64.     @$ni = imagecreatetruecolor($ftoW,$ftoH);  
  65.     if($ni)  
  66.     {  
  67.      imagecopyresampled($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);  
  68.     }  
  69.     else 
  70.     {  
  71.      $ni=imagecreate($ftoW,$ftoH);  
  72.      imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);  
  73.     }  
  74.    }  
  75.    else 
  76.    {  
  77.     $ni=imagecreate($ftoW,$ftoH);  
  78.     imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);  
  79.    }  
  80.    //裁剪图片成标准缩略图  
  81.    $new_imgx = imagecreatetruecolor($toW,$toH);  
  82.    if($newH >= $toH)  
  83.    {  
  84.     imagecopyresampled($new_imgx,$ni,0,0,0,($newH - $toH)/2,$toW,$toH,$toW,$toH);  
  85.    }  
  86.    else 
  87.    {  
  88.     imagecopyresampled($new_imgx,$ni,0,0,($newW - $toW)/2,0,$toW,$toH,$toW,$toH);  
  89.    }  
  90.    switch ($srcInfo[2])  
  91.    {  
  92.     case 1:  
  93.      imagegif($new_imgx,$toFile);  
  94.      break;  
  95.     case 2:  
  96.      imagejpeg($new_imgx,$toFile,85);  
  97.      break;  
  98.     case 3:  
  99.      imagepng($new_imgx,$toFile);  
  100.      break;  
  101.     case 6:  
  102.      imagebmp($new_imgx,$toFile);  
  103.      break;  
  104.     default:  
  105.      return false;  
  106.    }  
  107.    imagedestroy($new_imgx);  
  108.    imagedestroy($ni);  
  109. }  
  110. imagedestroy($im);  
  111. return true;  

 

本文如何解决织梦DedeCms缩略图不拉伸变形的方法到此结束。一个人有没有钱不一定穷,但没有梦想那就穷定了。小编再次感谢大家对我们的支持!

您可能有感兴趣的文章
织梦后台文档列表添加复制文档功能支持所有模型

织梦无法上传ico图标格式文件的如何解决方法

dedecms如何实现任意页面调用当前会员信息的方

织梦dede:tag调用指定多个栏目的TAG标签

织梦栏目列表按附加表自定义字段排序