織夢(mèng)目前幾個(gè)最新版本的縮略圖生成方式都是采用縮小或拉伸的方式進(jìn)行完整顯示,如果使用的圖片和縮略圖所顯示的比例不一致的話(huà),會(huì)使得縮略圖拉伸變形。如果不改變織夢(mèng)目前的縮略圖顯示方式的話(huà),又想縮略圖不拉伸變形顯示,就得制作一個(gè)和顯示縮略圖位置大小一致或者圖片比例一致且大于縮略圖的分辨率就會(huì)不拉伸變形了。
我們可以通過(guò)下面方法修改實(shí)現(xiàn),對(duì)圖片進(jìn)行按寬或高進(jìn)行放縮,超過(guò)縮略圖大小的部分再進(jìn)行裁剪,這樣生成的縮略圖的顯示效果要比原來(lái)的要好得多了。同時(shí)也可以采取之際制作好分辨率一致的縮略圖進(jìn)行顯示。
于是重新修改了一下DedeCms v5.6縮略圖生成方法。
默認(rèn)dedecms5.6默認(rèn)生成的縮略圖,縮略圖大小設(shè)置為:100*100(直接把圖片縮小了)
看起來(lái)很不美觀,影響了圖片的觀賞性
DedeCms v5.6縮略圖裁剪優(yōu)化方法
修改如下:
打開(kāi)/includes/image.func.php文件,
//縮圖片自動(dòng)生成函數(shù),來(lái)源支持bmp、gif、jpg、png
//但生成的小圖只用jpg或png格式
找到代碼第44行function ImageResize
至
//獲得GD的版本之間的代碼,用如下的代碼覆蓋(大家請(qǐng)注意備份)。
-
functionImageResize($srcFile,$toW,$toH,$toFile="")
-
{
-
global$cfg_photo_type;
-
if($toFile=="")
-
{
-
$toFile=$srcFile;
-
}
-
$info="";
-
$srcInfo=GetImageSize($srcFile,$info);
-
switch($srcInfo[2])
-
{
-
case1:
-
if(!$cfg_photo_type['gif'])
-
{
-
returnfalse;
-
}
-
$im=imagecreatefromgif($srcFile);
-
break;
-
case2:
-
if(!$cfg_photo_type['jpeg'])
-
{
-
returnfalse;
-
}
-
$im=imagecreatefromjpeg($srcFile);
-
break;
-
case3:
-
if(!$cfg_photo_type['png'])
-
{
-
returnfalse;
-
}
-
$im=imagecreatefrompng($srcFile);
-
break;
-
case6:
-
if(!$cfg_photo_type['bmp'])
-
{
-
returnfalse;
-
}
-
$im=imagecreatefromwbmp($srcFile);
-
break;
-
}
-
$srcW=ImageSX($im);
-
$srcH=ImageSY($im);
-
if($srcW<=$toW&&$srcH<=$toH)
-
{
-
returntrue;
-
}
-
//縮略生成并裁剪
-
$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);
-
}
-
//裁剪圖片成標(biāo)準(zhǔn)縮略圖
-
$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])
-
{
-
case1:
-
imagegif($new_imgx,$toFile);
-
break;
-
case2:
-
imagejpeg($new_imgx,$toFile,85);
-
break;
-
case3:
-
imagepng($new_imgx,$toFile);
-
break;
-
case6:
-
imagebmp($new_imgx,$toFile);
-
break;
-
default:
-
returnfalse;
-
}
-
imagedestroy($new_imgx);
-
imagedestroy($ni);
-
}
-
imagedestroy($im);
-
returntrue;
-
}