原创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 001
002 if ( ! function_exists('ImageResize'))
003 002
004 {
005 003
006     function ImageResize($srcFile,$toW,$toH,$toFile="")
007 004
008 {
009 005
010 global $cfg_photo_type;
011 006
012 if($toFile=="")
013 007
014 {
015 008
016    $toFile = $srcFile;
017 009
018 }
019 010
020 $info = "";
021 011
022 $srcInfo = GetImageSize($srcFile,$info);
023 012
024 switch ($srcInfo[2])
025 013
026 {
027 014
028    case 1:
029 015
030     if(!$cfg_photo_type['gif'])
031 016
032     {
033 017
034      return false;
035 018
036     }
037 019
038     $im = imagecreatefromgif($srcFile);
039 020
040     break;
041 021
042    case 2:
043 022
044     if(!$cfg_photo_type['jpeg'])
045 023
046     {
047 024
048      return false;
049 025
050     }
051 026
052     $im = imagecreatefromjpeg($srcFile);
053 027
054     break;
055 028
056    case 3:
057 029
058     if(!$cfg_photo_type['png'])
059 030
060     {
061 031
062      return false;
063 032
064     }
065 033
066     $im = imagecreatefrompng($srcFile);
067 034
068     break;
069 035
070    case 6:
071 036
072     if(!$cfg_photo_type['bmp'])
073 037
074     {
075 038
076      return false;
077 039
078     }
079 040
080     $im = imagecreatefromwbmp($srcFile);
081 041
082     break;
083 042
084 }
085 043
086 $srcW=ImageSX($im);
087 044
088 $srcH=ImageSY($im);
089 045
090 if($srcW<=$toW && $srcH<=$toH )
091 046
092 {
093 047
094    return true;
095 048
096 }
097 049
098 //缩略生成并裁剪
099 050
100 $newW = $toH * $srcW / $srcH;
101 051
102            $newH = $toW * $srcH / $srcW;
103 052
104 if($newH >= $toH)
105 053
106 {
107 054
108    $ftoW = $toW;
109 055
110    $ftoH = $newH;
111 056
112 }
113 057
114 else
115 058
116 {
117 059
118                      $ftoW = $newW;
119 060
120    $ftoH = $toH;
121 061
122 }
123 062
124            if($srcW>$toW||$srcH>$toH)
125 063
126 {
127 064
128    if(function_exists("imagecreatetruecolor"))
129 065
130    {
131 066
132     @$ni = imagecreatetruecolor($ftoW,$ftoH);
133 067
134     if($ni)
135 068
136     {
137 069
138      imagecopyresampled($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);
139 070
140     }
141 071
142     else
143 072
144     {
145 073
146      $ni=imagecreate($ftoW,$ftoH);
147 074
148      imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);
149 075
150     }
151 076
152    }
153 077
154    else
155 078
156    {
157 079
158     $ni=imagecreate($ftoW,$ftoH);
159 080
160     imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);
161 081
162    }
163 082
164    //裁剪图片成标准缩略图
165 083
166    $new_imgx = imagecreatetruecolor($toW,$toH);
167 084
168    if($newH >= $toH)
169 085
170    {
171 086
172     imagecopyresampled($new_imgx,$ni,0,0,0,($newH - $toH)/2,$toW,$toH,$toW,$toH);
173 087
174    }
175 088
176    else
177 089
178    {
179 090
180     imagecopyresampled($new_imgx,$ni,0,0,($newW - $toW)/2,0,$toW,$toH,$toW,$toH);
181 091
182    }
183 092
184    switch ($srcInfo[2])
185 093
186    {
187 094
188     case 1:
189 095
190      imagegif($new_imgx,$toFile);
191 096
192      break;
193 097
194     case 2:
195 098
196      imagejpeg($new_imgx,$toFile,85);
197 099
198      break;
199 100
200     case 3:
201 101
202      imagepng($new_imgx,$toFile);
203 102
204      break;
205 103
206     case 6:
207 104
208      imagebmp($new_imgx,$toFile);
209 105
210      break;
211 106
212     default:
213 107
214      return false;
215 108
216    }
217 109
218    imagedestroy($new_imgx);
219 110
220    imagedestroy($ni);
221 111
222 }
223 112
224 imagedestroy($im);
225 113
226 return true;
227 114
228 }
229 115
230 }

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

5.6版image.func.php修改方法

替换

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

//获得GD的版本

中间的代码为:

001 001
002 function ImageResize($srcFile,$toW,$toH,$toFile="")
003 002
004 {
005 003
006 global $cfg_photo_type;
007 004
008 if($toFile=="")
009 005
010 {
011 006
012    $toFile = $srcFile;
013 007
014 }
015 008
016 $info = "";
017 009
018 $srcInfo = GetImageSize($srcFile,$info);
019 010
020 switch ($srcInfo[2])
021 011
022 {
023 012
024    case 1:
025 013
026     if(!$cfg_photo_type['gif'])
027 014
028     {
029 015
030      return false;
031 016
032     }
033 017
034     $im = imagecreatefromgif($srcFile);
035 018
036     break;
037 019
038    case 2:
039 020
040     if(!$cfg_photo_type['jpeg'])
041 021
042     {
043 022
044      return false;
045 023
046     }
047 024
048     $im = imagecreatefromjpeg($srcFile);
049 025
050     break;
051 026
052    case 3:
053 027
054     if(!$cfg_photo_type['png'])
055 028
056     {
057 029
058      return false;
059 030
060     }
061 031
062     $im = imagecreatefrompng($srcFile);
063 032
064     break;
065 033
066    case 6:
067 034
068     if(!$cfg_photo_type['bmp'])
069 035
070     {
071 036
072      return false;
073 037
074     }
075 038
076     $im = imagecreatefromwbmp($srcFile);
077 039
078     break;
079 040
080 }
081 041
082 $srcW=ImageSX($im);
083 042
084 $srcH=ImageSY($im);
085 043
086 if($srcW<=$toW && $srcH<=$toH )
087 044
088 {
089 045
090    return true;
091 046
092 }
093 047
094 //缩略生成并裁剪
095 048
096 $newW = $toH * $srcW / $srcH;
097 049
098            $newH = $toW * $srcH / $srcW;
099 050
100 if($newH >= $toH)
101 051
102 {
103 052
104    $ftoW = $toW;
105 053
106    $ftoH = $newH;
107 054
108 }
109 055
110 else
111 056
112 {
113 057
114                      $ftoW = $newW;
115 058
116    $ftoH = $toH;
117 059
118 }
119 060
120            if($srcW>$toW||$srcH>$toH)
121 061
122 {
123 062
124    if(function_exists("imagecreatetruecolor"))
125 063
126    {
127 064
128     @$ni = imagecreatetruecolor($ftoW,$ftoH);
129 065
130     if($ni)
131 066
132     {
133 067
134      imagecopyresampled($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);
135 068
136     }
137 069
138     else
139 070
140     {
141 071
142      $ni=imagecreate($ftoW,$ftoH);
143 072
144      imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);
145 073
146     }
147 074
148    }
149 075
150    else
151 076
152    {
153 077
154     $ni=imagecreate($ftoW,$ftoH);
155 078
156     imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);
157 079
158    }
159 080
160    //裁剪图片成标准缩略图
161 081
162    $new_imgx = imagecreatetruecolor($toW,$toH);
163 082
164    if($newH >= $toH)
165 083
166    {
167 084
168     imagecopyresampled($new_imgx,$ni,0,0,0,($newH - $toH)/2,$toW,$toH,$toW,$toH);
169 085
170    }
171 086
172    else
173 087
174    {
175 088
176     imagecopyresampled($new_imgx,$ni,0,0,($newW - $toW)/2,0,$toW,$toH,$toW,$toH);
177 089
178    }
179 090
180    switch ($srcInfo[2])
181 091
182    {
183 092
184     case 1:
185 093
186      imagegif($new_imgx,$toFile);
187 094
188      break;
189 095
190     case 2:
191 096
192      imagejpeg($new_imgx,$toFile,85);
193 097
194      break;
195 098
196     case 3:
197 099
198      imagepng($new_imgx,$toFile);
199 100
200      break;
201 101
202     case 6:
203 102
204      imagebmp($new_imgx,$toFile);
205 103
206      break;
207 104
208     default:
209 105
210      return false;
211 106
212    }
213 107
214    imagedestroy($new_imgx);
215 108
216    imagedestroy($ni);
217 109
218 }
219 110
220 imagedestroy($im);
221 111
222 return true;
223 112
224 }

 


爱搜源码 » 原创dedecms缩略图系列教程:解决dedecms缩略图缩放变形问题

发表评论

发表评论