裁剪扭曲/缩放图像
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/
【讨论】:
我已经定义了质量,但没有按预期工作。以上是关于裁剪扭曲/缩放图像的主要内容,如果未能解决你的问题,请参考以下文章