裁剪扭曲/缩放图像

Posted

技术标签:

【中文标题】裁剪扭曲/缩放图像【英文标题】:Crop distorting / scaling image 【发布时间】:2012-11-17 05:27:56 【问题描述】:

我有以下 php 代码:

$w = 300; // Width of new image
$h = 300; // Height of new image
$oh = 540; // Original file height
$ow = 720; // Original file width
$x = 196;
$y = 50;

$image = imagecreatefromjpeg('fileToCrop.jpg');
$cropped_image = imagecreatetruecolor($w, $h);
imagecopyresampled($cropped_image, $image, 0, 0, $x, $y, $ow, $oh, $w, $h);

imagejpeg($cropped_image, 'fileToCrop.jpg', 100);

想要裁剪图像,但我的图像扭曲/高于原始图像,例如:

原文:

裁剪(显示“N”代表“Not”):

我看不出我的代码有什么问题,而且图像发生的事情变大了..

【问题讨论】:

原始尺寸为 720x540。使用以下函数获取高度/宽度。 php.net/manual/en/function.getimagesize.php @twodayslate 抱歉,打错字了。 【参考方案1】:

你反转了imagecopyresampled的最后4个参数

bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

改成

imagecopyresampled($cropped_image, $image, 0, 0, $x, $y, $w, $h, $ow, $oh);

但实际上,您确定您不是在寻找裁剪区域的直接副本吗?

imagecopy($cropped_image, $image, 0, 0, $x, $y, $ow, $oh);

【讨论】:

这不能按预期工作,因为图像被重新采样。我需要一个 1:1 的图像,但裁剪用户选择的部分。 我只需要一张原始图像,但比例相同。例如,从 400x400 像素的图像中获得 300x300 像素的正方形。 imagecopy 会这样做 在此处进行了一些更改,使用imagecopy 而不是imagecopyresampled 一切正常,谢谢! (:【参考方案2】:

因为你省略了 imagejpeg() 的质量,所以它默认为 75% http://php.net/manual/en/function.imagejpeg.php

您可以尝试在第三个参数上添加 95 吗?

imagejpeg($cropped_image, 'fileToCrop.jpg', 95);

附: 如果您可以使用 3rdparty php 脚本,我建议您只使用 timthumb http://www.binarymoon.co.uk/projects/timthumb/

如果您需要更改裁剪位置,

http://www.binarymoon.co.uk/2010/08/timthumb-part-4-moving-crop-location/

【讨论】:

我已经定义了质量,但没有按预期工作。

以上是关于裁剪扭曲/缩放图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在网站中动态裁剪/缩放图像

调整图像大小而不扭曲或裁剪它

如何缩放 + 裁剪图像并在 imageview 上显示裁剪的图像

SwiftUI - 缩放、缩放和裁剪图像

缩放图像以在android中裁剪

裁剪缩放“Android”的图像