【发布时间】:2016-05-31 18:31:43
【问题描述】:
我正在使用画布开发一些简单的图像处理功能。 用户上传一张图片,可以旋转和裁剪它,然后点击确定。 然后将图像分成两半,每一半绘制镜像到两个画布元素,如下所示:
它在 Chrome、Firefox、IE 和 Android 设备上运行良好。 Safari 不会玩得很好。除分割功能外,所有图像处理都可以正常工作。它确实绘制到一个画布元素,但另一个只是黑色。我已尝试更改 drawImage 代码,但无法正常工作。
函数如下:
function splitImage(canvas, context, image, isLeftSide) {
canvas.width = img.width;
canvas.height = img.height;
context.save();
if(isLeftSide) {
context.drawImage(
image,
image.width / 2,
0,
image.width,
image.height,
canvas.width / 2,
0,
canvas.width,
canvas.height
);
context.scale(-1, 1);
context.drawImage(
image,
image.width / 2,
0,
image.width,
image.height,
-canvas.width / 2,
0,
canvas.width,
canvas.height
);
} else {
context.drawImage(
image,
0,
0,
image.width / 2,
image.height,
0,
0,
canvas.width / 2,
canvas.height
);
context.scale(-1, 1);
context.drawImage(
image,
0,
0,
image.width / 2,
image.height,
-canvas.width,
0,
canvas.width / 2,
canvas.height
);
}
context.restore();
download(canvas);
}
确切地说,是 if(isLeftSide) 中的 drawImage 操作在 Safari 中不起作用。
有什么想法吗?
编辑: 它似乎也不适用于 iOS 设备。 我读过 Safari 和 iOS 设备在处理大图像时可能会耗尽内存。 为了抵消这一点(并减少一些滞后),我添加了一个调整大小的功能。如有必要,图像将调整为最大 800 像素宽度和 800 像素高度,保持纵横比不变。这是在任何其他图像处理之前完成的,但没有任何区别。
调整大小功能:
function resizeImage() {
var size = 800;
if(imgTemp.width > size && imgTemp.width >= imgTemp.height) {
imgTemp.height = (imgTemp.height / imgTemp.width) * size;
imgTemp.width = size;
} else if (imgTemp.height > size && imgTemp.height > imgTemp.width) {
imgTemp.width = (imgTemp.width / imgTemp.height) * size;
imgTemp.height = size;
}
}
【问题讨论】:
标签: javascript jquery canvas safari image-manipulation