php缩放图像裁剪

Posted

技术标签:

【中文标题】php缩放图像裁剪【英文标题】:php scaled image cropping 【发布时间】:2012-06-15 01:21:12 【问题描述】:

我的文件系统上有一个图像。我将其显示在带有裁剪工具的页面上,但我将其缩小以适合裁剪工具区域(如果图像小于该区域,则将其拉伸以占据整个区域)。在此页面上,用户将选择要保留的照片区域(使用 jcrop)并提交。

在后端,我将等待上一页的坐标。我将得到 x1、x2、y1、y2、w 和 h。

问题在于,调整大小的图像(显示给用户的图像)上的坐标在全尺寸图像上并不容易使用,因为它们要么占比图像小的区域(它被缩小以适应屏幕),否则它会比图像大(它被拉伸以适应屏幕)。

我可以得到原始照片的高度和宽度以及它被强制进入的静态宽度和高度。

在已知尺寸的情况下,您将如何找到图像的正确区域?

我当前的代码在这里

$target_width = 150;
$target_height = 150;
$jpeg_quality= 90;
$tmp =explode('/',$_POST['filename']); 

$src = '../uploads/'.$tmp[count($tmp)-1];

$x1 = $_POST['x1'];
$x2 = $_POST['x2'];
$y1 = $_POST['y1'];
$y2 = $_POST['y2'];
$w = $_POST['w'];
$h = $_POST['h'];

$image = imagecreatefromjpeg($src);
$final = imagecreatetruecolor($target_width, $target_height);

imagecopyresampled($final, $image, 0, 0, $x1, $y1, $target_width, $target_height, $w, $h);
imagejpeg($final, $src, $jpeg_quality);

【问题讨论】:

【参考方案1】:

也许我的问题不是很清楚(我也很难向 IRL 的人解释),但我的回答应该可以很好地解决问题。

我的文件系统上有一个图像(路径可在 $_POST['image_path'] 获得)和一个看起来像“”的图像标签。我用一些 jquery 魔法从图像标签中获取了数据。

“比例”就是答案。 h_limit 是 img 标签的高度约束 w_limit是img标签的宽度约束

$h_limit = $_POST['h_limit'];
$w_limit = $_POST['w_limit'];

list($width, $height) = getimagesize($_POST['image_path']);
$w_mult = $width/$w_limit;
$h_mult = $height/$h_limit;

然后我就可以了

imagecopyresampled($final, $image, 0, 0, $x1*$w_mult, $y1*$h_mult, $target_width, $target_height, $w*$w_mult, $h*$h_mult);

【讨论】:

【参考方案2】:

我不确定为什么显示尺寸不同,但您不能只跟踪浏览器中的显示尺寸(我不知道这是否已在您的代码中修复,所以一些 javascript 和额外的表单字段可能是必需的)然后,在 php 中,首先调整到该大小,然后裁剪

原始图像 ---> 调整为用户在浏览器中看到的大小 ---> 根据用户提供的坐标裁剪

【讨论】:

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

如何使用 jquery 裁剪缩放的图像

PHP实现的自定义图像居中裁剪函数示例

PHP中的图像裁剪产生空白结果

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

php图片裁剪

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