PHP图像调整大小和裁剪功能

Posted

技术标签:

【中文标题】PHP图像调整大小和裁剪功能【英文标题】:PHP image Resize and Crop Function 【发布时间】:2010-10-01 04:44:34 【问题描述】:

我想要一个功能,当我上传照片时,它应该裁剪图像,而不管图像从中心的比例如何,确保裁剪在图像内部。

上图是2592 * 1944

我想裁剪 159 * 129 的图像

这就是我在使用 cakephp 插件(Miles Johnsons Upload Plugin)时得到的结果

谁能帮我找到一个图像裁剪功能来做到这一点,或者帮助我用算法来做同样的事情。

【问题讨论】:

您的意思是“调整大小”而不是“裁剪”吗? 调整大小、裁剪或调整大小并裁剪? 我不确定如何以正确的方式进行操作。我希望最终图像具有图像的最大部分,但具有我需要的大小。所以我认为它可能是调整大小和裁剪或其他组合。我不确定。 【参考方案1】:

这个问题解决了,查看最新版本的 cake-uploader pluign。 https://github.com/milesj/cake-uploader/commit/2be63f32730755cffbace17ee8fa2d686785964d

【讨论】:

【参考方案2】:

我用这个:http://shiftingpixel.com/2008/03/03/smart-image-resizer/ 来创建在这里找到的所有图像缩略图:http://www.patriciashin.com/painting.php

【讨论】:

对不起,我没有添加更多,我的笔记本电脑电池没电了。无论如何,这个脚本是非常可定制的。他们的文档非常好。我想我什至能够调整脚本以更好地满足我的需求。 Cakephp 使进入 3rd 方脚本变得相当容易,但您可能必须将此脚本与一个类协调才能最有效。让我知道您的想法,我愿意提供帮助。 看起来很有希望。我正计划构建一个插件并将其作为开源发布。你会感兴趣吗 ?因为那里的脚本我没有发现很多他们做适当的调整大小和裁剪。 我当然会感兴趣。只需在异地联系我进行协调。我并不总是有很多时间,但我会尽我所能提供帮助。【参考方案3】:

我必须说我没有彻底测试这段代码,我修改了它供个人使用,这应该可以帮助你解决问题。

替换plugin/uploader/vendor/uploader.php中的crop函数

368 号线附近

具有以下功能

 public function crop(array $options = array(), $explicit = false) 
    if ($this->_data[$this->_current]['group'] != 'image' || !$this->_enabled) 
        return false;
    

    $options = $options + array('location' => self::LOC_CENTER, 'quality' => 100, 'width' => null, 'height' => null, 'append' => null, 'prepend' => null);
    $width = $this->_data[$this->_current]['width'];
    $height = $this->_data[$this->_current]['height'];
    $src_x = 0;
    $src_y = 0;
    $dest_w = $width;
    $dest_h = $height;
    $location = $options['location'];

    if (is_numeric($options['width']) && is_numeric($options['height'])) 
        $newWidth = $options['width'];
        $newHeight = $options['height'];

        if ($width / $newWidth > $height / $newHeight) 
            $dest_h = $options['height'];
            $dest_w = round($width / ($height / $newHeight));
         else 
            $dest_w = $options['width'];
            $dest_h = round($height / ($width / $newWidth));
        
     else 
        if ($width > $height) 
            $newWidth = $height;
            $newHeight = $height;
         else 
            $newWidth = $width;
            $newHeight = $width;
        

        $dest_h = $newHeight;
        $dest_w = $newWidth;
    

    $src_x = 0;
    $src_y = 0;
    if ($dest_w > $newWidth) 
            $src_x = ceil(( ($dest_w - $newWidth) / 2) * ($height / $newHeight));
    

    if ($dest_h > $newHeight) 
            $src_y = ceil(( ($dest_h - $newHeight) / 2) * ($width / $newWidth));
    

    $append = '_cropped_' . $newWidth . 'x' . $newHeight;

    if ($options['append'] !== false && empty($options['append'])) 
        $options['append'] = $append;
    

    $transform = array(
        'width' => $newWidth,
        'height' => $newHeight,
        'source_x' => $src_x,
        'source_y' => $src_y,
        'source_w' => $width,
        'source_h' => $height,
        'dest_w' => $dest_w,
        'dest_h' => $dest_h,
        'target' => $this->setDestination($this->_data[$this->_current]['name'], true, $options, false),
        'quality' => $options['quality']
    );
    if ($this->transform($transform)) 

        return $this->_returnData($transform, $append, $explicit);
    

    return false;

亲切的问候。

【讨论】:

以上是关于PHP图像调整大小和裁剪功能的主要内容,如果未能解决你的问题,请参考以下文章

PHP:图像调整大小和裁剪为纵向

将裁剪添加到 PHP 图像调整大小脚本

从中心裁剪并在 PHP 中调整大小(函数)

php调整图像大小然后裁剪图像问题

使用 PHP 图像调整大小/裁剪内置方法的高内存使用率

Dart/Flutter 替代 PHP 调整裁剪图像大小?