$cfg_thumb_fix
和 $cfg_watermark_fix
来避免缩略图拉伸变形,同时使用 $cfg_watermark_type
设置水印类型。在DEDECMS 5.7中,生成的缩略图默认采用缩小或拉伸的方式显示,如果上传的图片与缩略图的比例不一致,会导致缩略图拉伸变形,为了解决这个问题,可以通过修改代码来实现缩略图按比例裁剪,避免变形,以下是详细步骤和相关示例:
一、修改缩略图生成函数
1、打开文件:include/helpers/image.helper.php
2、找到并覆盖函数:找到function 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; }
二、添加自定义缩略图函数
1、打开文件:include/helpers/extend.helper.php
2、在文件末尾添加函数:添加以下代码:
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; } }
三、调用方法及参数说明
1、标签调用:使用以下标签调用缩略图函数:
[field:picname function='thumb(@me,100,100)'/]
2、参数说明:
$width
:缩略图宽度(整数)。
$height
:缩略图高度(整数)。
$bg
:是否用空白填补,默认自动填补,背景填充颜色在系统附件设置里(true/false),调用长宽为100像素的缩略图:[field:picname function='thumb(@me,100,100)'/]
,保留原有比例,不自动填充:[field:picname function='thumb(@me,100,100,false)'/]
。
四、注意事项及FAQs
1. 常见问题及解决方法:
问题1:缩略图生成失败怎么办?
解答:检查图片路径是否正确,确保源图片存在且可读,确认GD库函数是否已启用。
问题2:如何更改缩略图的背景颜色?
解答:在系统附件设置中修改背景填充颜色,如果需要透明背景,请将$bg
参数设置为false
。
通过以上步骤,可以实现DEDECMS 5.7中缩略图按比例裁剪,避免拉伸变形的问题,此方法不仅提高了图片的观赏性,还能确保不同尺寸的缩略图在不同页面中的一致性。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1236006.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复