【问题标题】:php resize image zoomcrop without border (logic)php调整无边框图像缩放裁剪(逻辑)
【发布时间】:2011-11-18 03:35:04
【问题描述】:

我有一个图像处理类,我想创建始终填充整个新宽度和高度的图像,因此没有边框/纯色背景,我只是无法理解如何让它始终填充高度和宽度( 保持上传图片的纵横比)如果图片的宽度和高度小于新的图片尺寸..

就像 phpthumb 类中的 zoomcrop (zc=1) 一样(我查看了其中的代码,但我无法模仿行为)

    public function resizeCrop($newwidth, $newheight) {

                        ...

            $x = $this->getX();
            $y = $this->getY();

            ...

            else if ($x < $newwidth && $y < $newheight)
            {

            // logic ??

            }

    }

【问题讨论】:

    标签: php resize gd zooming crop


    【解决方案1】:

    您需要确保较小的一侧(相对于原始图像和容器的纵横比)缩放到最大。看看这段代码:

    public function resizeCrop($newwidth, $newheight) {
                    ...
        $x = $this->getX();
        $y = $this->getY();
    
        // old images width will fit
        if(($x / $y) < ($newwidth/$newheight)){
            $scale = $newwidth/$x;
            $newX = 0;
            $newY = - ($scale * $y - $newheight) / 2;
    
        // else old image's height will fit
        }else{
            $scale = $newheight/$y;
            $newX = - ($scale * $x - $newwidth) / 2;
            $newY = 0;
        }
    
        // new image
        $dest = imagecreatetruecolor($newwidth, $newheight);
    
        // now use imagecopyresampled
        imagecopyresampled($dest, $src, $newX, $newY, 0, 0, $scale * $x, $scale * $y, $x, $y);
        return $dest;
    }
    

    更新:更正了该功能。它现在运行良好,我已经在我的开发机器上对其进行了测试。

    【讨论】:

    • @l0l0l0l0l 你到底是什么意思没有像它应该的那样扩展。更好地描述问题可能会有所帮助。这也是一个可重现的错误,如果是这样,您能否提供一个样本原始宽度和高度会产生不正确的缩放。
    【解决方案2】:

    保持纵横比,您需要选择:要么将图像放大然后裁剪原始图像,要么将其恰好适合然后填充未达到的部分带有纯色的边缘。

    前者,您可以分别比较宽度和高度的百分比变化,然后使用较大的百分比作为两个维度的乘数。对于要放入 2w x 3h 单位区域并保持纵横比的 1 x 1 单位图像:您可以使用 3x 乘数,获得 3 x 3 单位图像,然后左右裁剪 0.5 个单位。

    后者,您使用较小的百分比作为乘数。对于要放入 2w x 3h 单位区域并保持纵横比的 1 x 1 单位图像:您可以使用 2x 乘数,获得 2 x 2 单位图像,然后添加 0.5 个单位的纯色顶部/底部.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-16
      • 2018-01-11
      • 2016-08-29
      • 2017-06-18
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多