原创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

*/

中间的代码为:

001if ( ! function_exists('ImageResize'))002{003    function ImageResize($srcFile,$toW,$toH,$toFile="")004{005global $cfg_photo_type;006if($toFile=="")007{008   $toFile = $srcFile;009}010$info = "";011$srcInfo = GetImageSize($srcFile,$info);012switch ($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);045if($srcW<=$toW && $srcH<=$toH )046{047   return true;048}049//缩略生成并裁剪050$newW = $toH * $srcW / $srcH;051           $newH = $toW * $srcH / $srcW;052if($newH >= $toH)053{054   $ftoW = $toW;055   $ftoH = $newH;056}057else058{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    else072    {073     $ni=imagecreate($ftoW,$ftoH);074     imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);075    }076   }077   else078   {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   else089   {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}112imagedestroy($im);113return true;114}115}

修改好后保存文件即可,赶紧添加个带图片的文章试试吧,如果你不愿意修改可直接

5.6版image.func.php修改方法

替换

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

//获得GD的版本

中间的代码为:

001function ImageResize($srcFile,$toW,$toH,$toFile="")002{003global $cfg_photo_type;004if($toFile=="")005{006   $toFile = $srcFile;007}008$info = "";009$srcInfo = GetImageSize($srcFile,$info);010switch ($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);043if($srcW<=$toW && $srcH<=$toH )044{045   return true;046}047//缩略生成并裁剪048$newW = $toH * $srcW / $srcH;049           $newH = $toW * $srcH / $srcW;050if($newH >= $toH)051{052   $ftoW = $toW;053   $ftoH = $newH;054}055else056{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    else070    {071     $ni=imagecreate($ftoW,$ftoH);072     imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);073    }074   }075   else076   {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   else087   {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}110imagedestroy($im);111return true;112}

可以直接

因dedecms版本的不同代码有所不一样,如果有问题可以找织梦58帮忙解决

世上没有绝望的处境,只有对处境绝望的人。

原创dedecms缩略图系列教程:解决dedecms缩略图缩放

相关文章:

你感兴趣的文章:

标签云: