各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > CMS教程 > dedecms

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

管理员 2014-10-03
dedecms
82

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

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

于是重新修改了一下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;  

 

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 lecms, classcms, fastadmin, pbootcms, phpcms, eyoucms, yzmcms, PHP, xunruicms, jizhicms, dedecms, wordpress, hkcms, yzncms, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

扫码关注

qrcode

QQ交谈

回顶部