背景:dedecms生成縮略圖的原理不夠靈活導(dǎo)致縮略圖變形,比如后臺設(shè)置縮略圖的尺碼為:120*90即為3:2的圖片,但是假如內(nèi)容里的大圖尺碼為300*300即1:1,這樣生成出來的圖片就會變形,嚴(yán)重影響網(wǎng)站美觀,本文介紹通過修改dedecms生成縮略源碼方法解決定問題
打開“include/image.func.php”文件,該文件在dedecms5.6,5.7中所在的目錄不一樣,5.6中文件在/include/下,5.7中文件在/include/helpers/,如果你懶的找可以直接在網(wǎng)站根目錄搜索image.func.php文件
如果你使用的是dedecms5.7,打開目錄/include/helpers/找到image.helper.php文件
如果你使用的是dedecms5.6,打開目錄/include/找到image.func.php文件
替換
/**
* 縮圖片自動生成函數(shù),來源支持bmp、gif、jpg、png
* 但生成的小圖只用jpg或png格式
*
* @access public
* @param string $srcFile 圖片路徑
* @param string $toW 轉(zhuǎn)換到的寬度
* @param string $toH 轉(zhuǎn)換到的高度
* @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 //裁剪圖片成標(biāo)準(zhǔn)縮略圖 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 } |
修改好后保存文件即可,趕緊添加個帶圖片的文章試試吧,如果你不愿意修改可直接
替換
//縮圖片自動生成函數(shù),來源支持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 //裁剪圖片成標(biāo)準(zhǔn)縮略圖 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版本的不同代碼有所不一樣,如果有問題可以找跟版網(wǎng)幫忙解決
上一篇:
下一篇:
版權(quán)聲明: 本站資源均來自互聯(lián)網(wǎng)或會員發(fā)布,如果侵犯了您的權(quán)益請與我們聯(lián)系,我們將在24小時內(nèi)刪除!謝謝!
轉(zhuǎn)載請注明: 原創(chuàng)dedecms縮略圖系列教程:解決dedecms縮略圖縮放變形問題