找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1442|回复: 0

[分享] 使DEDECMS缩略图不变形的方法

[复制链接]
发表于 2018-2-8 11:24:47 | 显示全部楼层 |阅读模式 来自 中国–河南–新乡
由于DEDECMS v5.6缩略图生成方法是按比例进行放缩的,和之前的版本问题一样,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;
  112. }
复制代码

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-12-22 21:42 , Processed in 0.041051 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表