织梦缩略图自动补齐绝对路径_织梦5.7最新版缩略图终极解决办法(不变形、居中裁剪)附三种方法...

刚才我在做一个织梦站的时候出现了一个问题就是不管怎样弄自动生成的缩略图文件在列表里都是失真的,变形很严重特别影响美观尤其是那种图片特别长的或者是特别宽的主要元素不集中的图片来说简直就是灾难。

今天就来说下我的解决方法,通过下面的方法织梦的缩略图上就会变得特别漂亮,PS都用过吧,就相当于ctrl+T一张图片,然后按住键盘上的Shift+Alt键来变形这张图片一样,唯一的区别就是通过这种方法把图片变小了,嗯原理就是这个样子。

好了,下面的方法我们都用这张图片来演示一下吧我们暂且叫它原图:

第一种方法:原生缩略图不用动不用改生成的缩略图如下图所示:

第二种方法:也就是网上流传的一种方法:

缩略图是下面这个样子的

操作流程:打开网站根目录下的include/helpers/文件夹中的“image.helper.php”文件。

查找如下代码:$srcW=ImageSX($im);

$srcH=ImageSY($im);

if($srcW<=$toW && $srcH<=$toH )

return TRUE;

$toWH=$toW/$toH;

$srcWH=$srcW/$srcH;

if($toWH<=$srcWH){

$ftoW=$toW;

$ftoH=$ftoW*($srcH/$srcW);

}

else

{

$ftoH=$toH;

$ftoW=$ftoH*($srcW/$srcH);

}

把上面的这些代码全部替换成下面的代码:$srcW=ImageSX($im);

$srcH=ImageSY($im);

if($srcW<=$toW && $srcH<=$toH )

return TRUE;

$toWH=$toW/$toH;

$srcWH=$srcW/$srcH;

$ftoH=$toH;$ftoW=$toW;

if ($toWH<=$srcWH) {

$src_Y = 0;

$src_X = ($srcW-$srcH*$toWH)/2;

$srcW = $srcH*$toWH;

}

else

{

$src_X = 0;

$src_Y = ($srcH-$srcW/$toWH)/2;

$srcH = $srcW/$toWH;

}

上面的方法是超过缩略图大小的部分就进行裁剪如果说一张图片高是1000像素但只有中间有点20像素的图片则裁剪出来的缩略图就是空白,它剪的是左上角的部分,原理是把一张原图从左上角裁剪出织梦系统设置的高宽后其它的内容全部扔掉。可以对比本文开头的“原图”和“第二种方法”缩略图这两张图片。

第三种方法:终极长宽高等比例自适应裁剪缩略图

它裁剪出来的缩略图是下面这样子的,亲可以对比文章开头的“原图”看一下区别就知道了。

操作流程:同方法二打开网站根目录下的include/helpers/文件夹中的“image.helper.php”文件。查找“缩图片自动生成函数,来源支持bmp、gif、jpg、png”

看到了吧在这些注释的下面从以下代码开始:if ( ! function_exists('ImageResize'))

到“获得GD的版本”这些注释结束的所有内容替换成下面的代码(注意是除注释外全部替换哦):if ( ! function_exists('ImageResize'))

{ function ImageResize($srcFile,$toW,$toH,$toFile="")

{

global $cfg_photo_type;

if($toFile=="")

{ $toFile = $srcFile;

}

$info = "";

$srcInfo = GetImageSize($srcFile,$info);

switch ($srcInfo[2])

{ case 1: if(!$cfg_photo_type['gif']) { return false; } $im = imagecreatefromgif($srcFile); break; case 2: if(!$cfg_photo_type['jpeg']) { return false; } $im = imagecreatefromjpeg($srcFile); break; case 3: if(!$cfg_photo_type['png']) { return false; } $im = imagecreatefrompng($srcFile); break; case 6: if(!$cfg_photo_type['bmp']) { return false; } $im = imagecreatefromwbmp($srcFile); break;

}

$srcW=ImageSX($im);

$srcH=ImageSY($im);

if($srcW<=$toW && $srcH<=$toH )

{ return true;

}

//缩略生成并裁剪

$newW = $toH * $srcW / $srcH; $newH = $toW * $srcH / $srcW;

if($newH >= $toH)

{ $ftoW = $toW; $ftoH = $newH;

}

else

{ $ftoW = $newW; $ftoH = $toH;

} if($srcW>$toW||$srcH>$toH)

{ if(function_exists("imagecreatetruecolor")) { @$ni = imagecreatetruecolor($ftoW,$ftoH); if($ni) { imagecopyresampled($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH); } else { $ni=imagecreate($ftoW,$ftoH); imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH); } } else { $ni=imagecreate($ftoW,$ftoH); imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH); }

//裁剪图片成标准缩略图

$new_imgx = imagecreatetruecolor($toW,$toH);

if($newH >= $toH)

{

imagecopyresampled($new_imgx,$ni,0,0,0,($newH - $toH)/2,$toW,$toH,$toW,$toH);

}

else

{

imagecopyresampled($new_imgx,$ni,0,0,($newW - $toW)/2,0,$toW,$toH,$toW,$toH);

}

switch ($srcInfo[2])

{ case 1: imagegif($new_imgx,$toFile); break; case 2: imagejpeg($new_imgx,$toFile,90); break; case 3: imagepng($new_imgx,$toFile); break; case 6: imagebmp($new_imgx,$toFile); break; default: return false;

} imagedestroy($new_imgx); imagedestroy($ni);

}

imagedestroy($im);

return true;

}

}

为了避免出错下面给一个示例:/**

* 缩图片自动生成函数,来源支持bmp、gif、jpg、png

* 但生成的小图只用jpg或png格式

*

* @access public

* @param string $srcFile 图片路径

* @param string $toW 转换到的宽度

* @param string $toH 转换到的高度

* @param string $toFile 输出文件到

* @return string

*/

(注意哦替换的是这里全部的内容哦很长的一几段内容)

/**

* 获得GD的版本

*

* @access public

* @return int

*/

好了到此保存上传然后试着生成一个缩略图看看吧。到目前为止第三种方法是我见过最好的了它最大的特点就是居中裁剪这样无论如何也不会变形了,而且一般图片的主要像素都是从中间开始的,裁剪出来的缩略图和原图的中间部分都是一模一样的只是把原图中间变小了。

下面是一个列表中的图片分别用两种方法进行裁切的缩略图两个列表对比:第一张是原生的图片直接强制缩小;第二张是优化后的按比例裁切不变形。可以很直观得发现第一个列表和第二个列表的区别。

原生列表

按比例裁切后的列表

最后博主的一点心声,本博开办以来也有不短的时间了,只是自己一个工作笔记和分享知识的平台内容多不多不重要,现在随便一个知识点网上一查能查出无数出来而且还都是换汤不换药内容基本一致,但能真正做到解决问题的却是少之又少,即使我一个月只有一天的时间来发文章只要它精辟只要它能解决问题,我觉得比一天发30章没经过测试也不知道从哪弄来的文章要好的多,毕竟我有时候有不懂的地方也都会想想以前遇到过的时候有没有发表在博客上,就会过来找一找,找不到再去其它地方找。哦哦~~BB完了,走你!

喜欢 (7)or分享 (0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值