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

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

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1220827.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希新媒体运营
上一篇 2024-10-17 17:23
下一篇 2024-10-17 17:31

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入