Dar*_*ney 6 html jquery html5-canvas
我有一个简单的画布,上面有一个图像(图像 500x333):
<canvas id="capEdit" width="500" height="333"></canvas>
Run Code Online (Sandbox Code Playgroud)
然后我使用 CSS 在画布/图像上应用一个简单的水平翻转,效果很好
.flipH {
-moz-transform: scale(-1, 1);
-webkit-transform: scale(-1, 1);
-o-transform: scale(-1, 1);
transform: scale(-1, 1);
filter:
FlipH;
}
Run Code Online (Sandbox Code Playgroud)
我现在试图将图像以翻转状态保存在画布上,但它只保存原始图像,这是我正在尝试的:
$(document).on("click", "#applyFlip", function() { // save
var canvas = document.getElementById("capEdit");
var dataUrl = canvas.toDataURL();
$.ajax({
type: "POST",
url: '/ajax/saveFlip.php',
dataType: 'text',
data: {
base64data : dataUrl,
imgName : imgName
}
});
});
Run Code Online (Sandbox Code Playgroud)
问题:这应该有效吗?如果是这样,为什么不呢?如果它甚至不能像这样工作,有没有办法实现这些结果?基本上,水平和垂直翻转和旋转,然后保存
这里的问题是,当您使用 CSS 时,除了视觉上之外,您实际上并没有转换图像。您需要实际转换图像的画布上下文。
这是一个很好的解释:http ://davidwalsh.name/convert-canvas-image
function convertImageToCanvas(image) {
var canvas = document.createElement("canvas");
canvas.width = image.width;
canvas.height = image.height;
canvas.getContext("2d").drawImage(image, 0, 0);
return canvas;
}
Run Code Online (Sandbox Code Playgroud)
使用该getContext方法在 Canvas 中绘制图像后,您可以使用画布方法(而不是 CSS)应用变换、旋转、平移等。如果您使用 CSS 更改它,您只是在浏览器中编辑其外观,而实际上并未操作像素数据。在实际绘制图像之前,您需要执行类似的操作:
// translate context to center of canvas
context.translate(canvas.width / 2, canvas.height / 2);
// rotate 180 degrees clockwise
context.rotate(Math.PI);
Run Code Online (Sandbox Code Playgroud)
解释 canvas 的工作原理有点超出了这个问题的范围,但请查看 Canvas api 以了解如何准确地转换上下文。一旦您在上下文中获得了图像,转换上下文就应该很容易了:)
一旦你让画布图像按照你想要的方式显示,你需要从中获取一个数据 URI(新图像)并将其传递给你的saveFlip.php函数。
// Converts canvas to an image
function convertCanvasToImage(canvas) {
var image = new Image();
image.src = canvas.toDataURL("image/png");
return image;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3016 次 |
| 最近记录: |