找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1059|回复: 0

[分享] DEDECMS5.7实现缩略图不拉伸变形的方法

[复制链接]
发表于 2018-2-8 13:50:08 | 显示全部楼层 |阅读模式 来自 中国–河南–新乡
  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-11-22 04:30 , Processed in 0.041290 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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