php - 如何使用 jquery imgAreaSelect 使用 php 裁剪图像?

标签 php image jquery-plugins crop

我正在使用以下 javascript 代码来实例化 jquery imgAreaSelect裁剪我的图像。

$(document).ready(function () {
    $('#ladybug').imgAreaSelect({
        onSelectEnd: function (img, selection) {
            $('input[name="x1"]').val(selection.x1);
            $('input[name="y1"]').val(selection.y1);
            $('input[name="x2"]').val(selection.x2);
            $('input[name="y2"]').val(selection.y2);            
        }
    });
});

这涉及以下(示例)html 代码:

<div>
    <img id="ladybug" src="ladybug.jpg" alt="" />
</div>

<div>
   <form action="#" method="post">
      <input id="x1" type="hidden" name="x1" value="" />
      <input id="y1" type="hidden" name="y1" value="" />
      <input id="x2" type="hidden" name="x2" value="" />
      <input id="y2" type="hidden" name="y2" value="" />
      <input type="submit" name="submit" value="Submit" />
   </form>
</div>

example imgAreaSelect

这非常有效,我在提交表单时将所有正确的信息返回给 php。但是,现在我必须使用 php 通过表单发送的坐标来修改图像。这比我想象的要难。

$image_info = getimagesize($filename);
$image = imagecreatefromjpeg($filename);

$width = imagesx($image);
$height = imagesy($image);

$resized_width = ((int)$formData["x2"]) - ((int)$formData["x1"]);
$resized_height = ((int)$formData["y2"]) - ((int)$formData["y1"]);

$resized_image = imagecreatetruecolor($resized_width, $resized_height);
imagecopyresampled($resized_image, $image, 0, 0, (int)$formData["x1"], (int)$formData["y1"], $resized_width , $resized_height, $width, $height);
imagejpeg($resized_image, $filename);

上面的脚本可以工作,但是它以错误的方式使用了坐标/宽度/高度。我总是在调整大小的图像中留下一个黑色的大边框:

example wrong cropped image

谁能给我指明正确的方向?

最佳答案

将以 imagecopyresampled 开头的行替换为以下内容即可:

imagecopyresampled($resized_image, $image, 0, 0, (int)$formData["x1"], (int)$formData["y1"], $width, $height, $width, $高度);

imagecopyresampled() 将从 src_image 的宽度 src_w 和高度 src_h 的矩形区域(src_x,src_y)放置到 dst_image 的宽度 dst_w 和高度 dst_h 的矩形区域中位置(dst_x,dst_y).

关于php - 如何使用 jquery imgAreaSelect 使用 php 裁剪图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18378545/

相关文章:

php - 如何使用 ajax 下载图像,然后将其替换为 div 背景?

jquery - 使用 JQuery 将第二个工具栏添加到 JQGrid

php - Laravel: 如何使用 Eloquent 查询数据库中特定日期 (dd/mm/yyy)

java - 如何使用 Picasso 指定多个后备图像?

image - RGB 565 - 为什么绿色采用 6 位

jQuery 拖放 ul 和 li 元素

javascript - 将方法插入 jQuery 插件

php - 如何使用php将iPhone输入的奇数字符转换为单个字符

php - 访问复选框表中的相应数据

php - Laravel Composer 更新更改的文件