织梦 DedeCMS 缩略图生成方式都是采用缩小或拉伸的方式进行完整显示,如果使用的图片和缩略图所显示的比例不一致的话,会使得缩略图拉伸变形。解决的思路是对图片进行按宽或高进行放缩,超过缩略图大小的部分再进行裁剪,这样生成的缩略图的显示效果要比原来的要好得多了。不过因为是剪裁的,会造成有些图片重要的部分也被剪掉了,如果是图片站,有些图片一剪裁,手或者脚就“断”了,所以这个方法仅供大家参考一下。如何解决织梦 DedeCMS5.7 缩略图变形的问题呢?还是修改织梦获取缩略图的函数。
DedeCMS5.7 的函数是在/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;
}
适用于全站需要多种尺寸的缩略图,该种方法可以和上述结合使用,效果更好。
1、增加函数:打开 include/extend.func.php,末尾增加
function thumb($imgurl, $width, $height, $bg = true)
{
global $cfg_mainsite,$cfg_multi_site;
$thumb = eregi("http://",$imgurl)?str_replace($cfg_mainsite,'',$imgurl):$imgurl;
list($thumbname,$extname) = explode('.',$thumb);
$newthumb = $thumbname.'_'.$width.'_'.$height.'.'.$extname;
if(!$thumbname || !$extname || !file_exists(DEDEROOT.$thumb)) return $imgurl;
if(!file_exists(DEDEROOT.$newthumb))
{
include_once DEDEINC.'/image.func.php';
if($bg==true)
{
ImageResizeNew(DEDEROOT.$thumb, $width, $height, DEDEROOT.$newthumb);
}
else
{
ImageResize(DEDEROOT.$thumb, $width, $height, DEDEROOT.$newthumb);
}
}
return $cfg_multi_site=='Y'?$cfg_mainsite.$newthumb:$newthumb;
}
2、后台设置:
说明:总的来说生成后的缩略图是由原图整体缩小后得到(这个部分是生成的原始缩略图),然后从上到下按照宽度裁切(这个部分是在原始缩略图的基础上再次裁切),如果你网站中不需要调用原始缩略图,同时需要三种规格的缩略图,那么你的缩略图总共会有 4 张,1 张原始缩略图,3 张你需要的尺寸。
设置:后台的附件管理中,缩略图生成的尺寸按照你网站中调取的规格,选择最宽的数值,最高的数值。我的做法: 我网站需要四套尺寸,列表页面的主体区域是重点,需要 191*258,还有 230*172; 其它的是边栏和底部,173*129,和 204*153,非常的不规则;由于是以宽度为准,同时我需要前 2 套都比较正常,要是后台附件设置为 230*258 ,那么 191*258 这个将会有补白,不是理想的选择, 所以我按照 191*258 这个尺寸的等比尺寸 230*311 来作为全局的设置。 这样首选保证了我重点的 2 套,同时其它 2 套也不会变形,只是会被裁剪。
3、页面调用:
标签 : [field:picname function=’thumb(@me,$width,$height,$bg)’/]
参数说明: $width:缩略图宽度(整数) $height:缩略图高度(整数) $bg:是否用空白填补,默认自动填补,背景填充颜色在系统-附件设置里(true/false)
举例:调用长宽为 100 像素的缩略图:[field:picname function=’thumb(@me,100,100)’/]
保留原有比例,不自动填充(不建议):[field:picname function=’thumb(@me,100,100,false)’/]
专业提供WordPress主题安装、深度汉化、加速优化等各类网站建设服务,详询在线客服!