原创dedecms缩略图系列教程:解决dedecms缩略图缩放变形问题
背景:dedecms生成缩略图的原理不够灵活导致缩略图变形,比如后台设置缩略图的尺码为:120*90即为3:2的图片,但是假如内容里的大图尺码为300*300即1:1,这样生成出来的图片就会变形,严重影响网站美观,本文介绍通过修改dedecms生成缩略源码方法解决定问题
打开“include/image.func.php”文件,该文件在dedecms5.6,5.7中所在的目录不一样,5.6中文件在/include/下,5.7中文件在/include/helpers/,如果你懒的找可以直接在网站根目录搜索image.func.php文件
如果你使用的是dedecms5.7,打开目录/include/helpers/找到image.helper.php文件
如果你使用的是dedecms5.6,打开目录/include/找到image.func.php文件
5.7版image.helper.php修改方法
替换
/**
* 缩图片自动生成函数,来源支持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
*/
中间的代码为:
001 if ( ! function_exists('ImageResize')) 002 { 003 function ImageResize($srcFile,$toW,$toH,$toFile="") 004 { 005 global $cfg_photo_type; 006 if($toFile=="") 007 { 008 $toFile = $srcFile; 009 } 010 $info = ""; 011 $srcInfo = GetImageSize($srcFile,$info); 012 switch ($srcInfo[2]) 013 { 014 case 1: 015 if(!$cfg_photo_type['gif']) 016 { 017 return false; 018 } 019 $im = imagecreatefromgif($srcFile); 020 break; 021 case 2: 022 if(!$cfg_photo_type['jpeg']) 023 { 024 return false; 025 } 026 $im = imagecreatefromjpeg($srcFile); 027 break; 028 case 3: 029 if(!$cfg_photo_type['png']) 030 { 031 return false; 032 } 033 $im = imagecreatefrompng($srcFile); 034 break; 035 case 6: 036 if(!$cfg_photo_type['bmp']) 037 { 038 return false; 039 } 040 $im = imagecreatefromwbmp($srcFile); 041 break; 042 } 043 $srcW=ImageSX($im); 044 $srcH=ImageSY($im); 045 if($srcW<=$toW && $srcH<=$toH ) 046 { 047 return true; 048 } 049 //缩略生成并裁剪 050 $newW = $toH * $srcW / $srcH; 051 $newH = $toW * $srcH / $srcW; 052 if($newH >= $toH) 053 { 054 $ftoW = $toW; 055 $ftoH = $newH; 056 } 057 else 058 { 059 $ftoW = $newW; 060 $ftoH = $toH; 061 } 062 if($srcW>$toW||$srcH>$toH) 063 { 064 if(function_exists("imagecreatetruecolor")) 065 { 066 @$ni = imagecreatetruecolor($ftoW,$ftoH); 067 if($ni) 068 { 069 imagecopyresampled($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH); 070 } 071 else 072 { 073 $ni=imagecreate($ftoW,$ftoH); 074 imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH); 075 } 076 } 077 else 078 { 079 $ni=imagecreate($ftoW,$ftoH); 080 imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH); 081 } 082 //裁剪图片成标准缩略图 083 $new_imgx = imagecreatetruecolor($toW,$toH); 084 if($newH >= $toH) 085 { 086 imagecopyresampled($new_imgx,$ni,0,0,0,($newH - $toH)/2,$toW,$toH,$toW,$toH); 087 } 088 else 089 { 090 imagecopyresampled($new_imgx,$ni,0,0,($newW - $toW)/2,0,$toW,$toH,$toW,$toH); 091 } 092 switch ($srcInfo[2]) 093 { 094 case 1: 095 imagegif($new_imgx,$toFile); 096 break; 097 case 2: 098 imagejpeg($new_imgx,$toFile,85); 099 break; 100 case 3: 101 imagepng($new_imgx,$toFile); 102 break; 103 case 6: 104 imagebmp($new_imgx,$toFile); 105 break; 106 default: 107 return false; 108 } 109 imagedestroy($new_imgx); 110 imagedestroy($ni); 111 } 112 imagedestroy($im); 113 return true; 114 } 115 } |
修改好后保存文件即可,赶紧添加个带图片的文章试试吧,如果你不愿意修改可直接
5.6版image.func.php修改方法
替换
//缩图片自动生成函数,来源支持bmp、gif、jpg、png
至
//获得GD的版本
中间的代码为:
001 function ImageResize($srcFile,$toW,$toH,$toFile="") 002 { 003 global $cfg_photo_type; 004 if($toFile=="") 005 { 006 $toFile = $srcFile; 007 } 008 $info = ""; 009 $srcInfo = GetImageSize($srcFile,$info); 010 switch ($srcInfo[2]) 011 { 012 case 1: 013 if(!$cfg_photo_type['gif']) 014 { 015 return false; 016 } 017 $im = imagecreatefromgif($srcFile); 018 break; 019 case 2: 020 if(!$cfg_photo_type['jpeg']) 021 { 022 return false; 023 } 024 $im = imagecreatefromjpeg($srcFile); 025 break; 026 case 3: 027 if(!$cfg_photo_type['png']) 028 { 029 return false; 030 } 031 $im = imagecreatefrompng($srcFile); 032 break; 033 case 6: 034 if(!$cfg_photo_type['bmp']) 035 { 036 return false; 037 } 038 $im = imagecreatefromwbmp($srcFile); 039 break; 040 } 041 $srcW=ImageSX($im); 042 $srcH=ImageSY($im); 043 if($srcW<=$toW && $srcH<=$toH ) 044 { 045 return true; 046 } 047 //缩略生成并裁剪 048 $newW = $toH * $srcW / $srcH; 049 $newH = $toW * $srcH / $srcW; 050 if($newH >= $toH) 051 { 052 $ftoW = $toW; 053 $ftoH = $newH; 054 } 055 else 056 { 057 $ftoW = $newW; 058 $ftoH = $toH; 059 } 060 if($srcW>$toW||$srcH>$toH) 061 { 062 if(function_exists("imagecreatetruecolor")) 063 { 064 @$ni = imagecreatetruecolor($ftoW,$ftoH); 065 if($ni) 066 { 067 imagecopyresampled($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH); 068 } 069 else 070 { 071 $ni=imagecreate($ftoW,$ftoH); 072 imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH); 073 } 074 } 075 else 076 { 077 $ni=imagecreate($ftoW,$ftoH); 078 imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH); 079 } 080 //裁剪图片成标准缩略图 081 $new_imgx = imagecreatetruecolor($toW,$toH); 082 if($newH >= $toH) 083 { 084 imagecopyresampled($new_imgx,$ni,0,0,0,($newH - $toH)/2,$toW,$toH,$toW,$toH); 085 } 086 else 087 { 088 imagecopyresampled($new_imgx,$ni,0,0,($newW - $toW)/2,0,$toW,$toH,$toW,$toH); 089 } 090 switch ($srcInfo[2]) 091 { 092 case 1: 093 imagegif($new_imgx,$toFile); 094 break; 095 case 2: 096 imagejpeg($new_imgx,$toFile,85); 097 break; 098 case 3: 099 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 } |
可以直接
因dedecms版本的不同代码有所不一样,如果有问题可以找做啦帮忙解决