当前位置:首页 > 行业动态 > 正文

如何在Dedecms模板中避免缩略图拉伸变形?

在Dedecms模板中,要确保缩略图不拉伸变形,可以设置CSS样式来控制图片的宽高比和尺寸。

在织梦CMS(DedeCMS)中,缩略图的生成方式默认是按照缩小或拉伸的方式进行完整显示,如果使用的图片和缩略图所显示的比例不一致,就会使得缩略图拉伸变形,为了解决这个问题,可以采取以下方法:

修改缩略图生成代码

打开文件并找到函数

1、打开文件:首先需要打开/includes/image.func.php 文件。

2、定位函数:在文件中定位到function ImageResize() 函数,这个函数负责生成缩略图。

修改代码

3、覆盖原有代码:用新的代码覆盖原有的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;
}

注意事项

备份原文件:在进行任何修改之前,请务必备份原始文件,以防止出现问题时能够恢复。

调整尺寸:确保缩略图的尺寸与实际显示需求相匹配,避免因尺寸不当导致的变形问题。

兼容性检查:在修改后,应进行充分的测试,确保在不同浏览器和设备上都能正常显示缩略图。

相关问答FAQs

Q1: 如何确保生成的缩略图不会拉伸变形

A1: 确保生成的缩略图不拉伸变形的方法是在生成缩略图时,根据原图的宽高比例进行适当的缩放和裁剪,通过上述代码的修改,可以实现这一功能,就是先计算新的宽度和高度,然后根据需要进行裁剪,以保持宽高比不变。

Q2: 如果我不想修改代码,还有其他方法可以避免缩略图拉伸变形吗?

A2: 如果不希望通过修改代码来解决问题,另一种方法是预先制作好符合显示需求的缩略图,这意味着在上传图片之前,就将其处理成与显示位置大小一致或者图片比例一致且大于缩略图的分辨率,这样在调用时就不会出现拉伸变形的问题,不过,这种方法可能需要更多的前期准备工作,并且不利于动态内容的更新。

0