DEDECMS5.7缩略图大小调用尺寸及缩略图模糊失真修正
DEDECMS
5.7缩略图大小适应调用尺寸及缩略图模糊不失真的修改方法:
A.首先在
网站后台系统
中设置网站缩略图尺寸大小
和模板中
调用图片最大尺寸
相同。 B.再打开文件"include/helpers/extend.helpes.php"
在最下面
加上以下代码if ( ! function_exists('thumb')) { 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; } }
调用方法: 标签 : [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)'/] C.再到
include/helpers/image.helpes.php
中写入以下代码/** * 缩图片自动生成函数,来源支持bmp、gif、jpg、png * 但生成的小图只用jpg或png格式 * @access public * @param string $srcFile * @param string $toW 转换到的宽度 * @param string $toH 转换到的高度 * @param string $toFile 输出文件到 * @return string */ 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,85); 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; } }