办理dedecms(5.6/5.7)缩略图缩放变形问题要领,我们知道,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/
假如你利用的是dedecms5.7,打开目次/include/helpers/找到image.helper.php文件。
假如你利用的是dedecms5.6,打开目次/include/找到image.func.php文件。
dedecms5.6版image.func.php修改要领(直接替换本来要领)
//[2020-11-04]:办理缩略图缩放变形问题(宽度、高度为靠山配置宽高)
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;
}
//[2020-11-04]:办理缩略图缩放变形问题(宽度、高度为靠山配置宽高)
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;
}
dedecms5.7版image.helper.php修改要领:
if (!function_exists('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;
}
}