【发布时间】:2016-03-17 20:58:22
【问题描述】:
我正在尝试用X and Y 坐标和width and height. 裁剪dataURL 图像
我不想调整图像大小。我只想获取区域 (x,y) 以及宽度和高度。
我已经在 PHP 中完成了此操作,但现在我正在尝试在 JS 中执行此操作。这是我的实际代码:
function resizeImage(url, width, height, x, y, callback) {
var canvas = document.createElement("canvas");
var context = canvas.getContext('2d');
var imageObj = new Image();
imageObj.onload = function() {
var sourceX = 0;
var sourceY = 0;
var sourceWidth = imageObj.width;
var sourceHeight = imageObj.height;
var destWidth = width;
var destHeight = height;
var destX = x;
var destY = y;
context.drawImage(imageObj, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight);
callback(canvas.toDataURL())
};
imageObj.src = url;
}
这个函数只是改变宽度和高度,这不是它应该做的结果。
这是我的PHP 代码(如果有助于更好地了解我)
<?php
class Cropper {
var $x;
var $y;
var $dataURL;
var $width;
var $height;
var $filter;
function __construct($x, $y, $dataURL, $width, $height, $filter) {
$this->x = $x;
$this->y = $y;
$this->dataURL = $dataURL;
$this->width = $width;
$this->height = $height;
$this->filter = $filter;
}
function setHeader() {
header('Content-Type: image/png');
}
function Render() {
$image = $this->dataURL;
$image = substr($image, 22);
$img = imagecreatetruecolor(340, 462);
$org_img = imagecreatefromstring(base64_decode($image));
imagecopy($img, $org_img, 0, 0, $this->x, $this->y, $this->width, $this->height);
if($this->filter == 1) imagefilter($img, IMG_FILTER_GRAYSCALE);
if($this->filter == 2) {
imagefilter($img,IMG_FILTER_GRAYSCALE);
imagefilter($img,IMG_FILTER_COLORIZE,100,50,0);
}
ob_start();
imagepng($img);
imagealphablending($img,true);
$image_data = ob_get_contents();
ob_end_clean();
$image_data_base64 = base64_encode($image_data);
imagedestroy($img);
return 'data:image/png;base64,'.$image_data_base64;
}
}
?>
为了更好地理解我,我还画了一张:
编辑:抱歉,在 X 和 Y 之间取反
所以函数需要返回黄色区域
我怎样才能做到这一点?我的代码有什么问题?谢谢
【问题讨论】:
-
您是否尝试过类似:github.com/fengyuanchen/cropper 或者您是否尝试自己编写?
-
我正在尝试自己编写。不想为此使用 lib
标签: javascript php jquery html