【发布时间】:2020-05-20 04:32:36
【问题描述】:
更新 - 第二部分
我注意到在旋转图像之前进行 ajax 调用时会出现问题。
我这样做:
$.ajax({
type:'POST',
beforeSend: function(request) {
request.setRequestHeader("Authorization", "Bearer {{ app('request')->token }}");
},
url: "my-url-to-rotate-image-on-server/90",
success:function(data) {
$('#my_id').rotate(90); // the rotate function is the code I wrote below
},
error: function(data) { }
});
如果我删除 ajax 调用并只旋转图像,它就可以工作。
我需要将图像旋转 90 度,但图像旋转了 180 度。
这是我在网上找到并使用的代码(一个 jquery 插件):
var p = this.get(0);
p.angle = 90;
if (p.angle >= 0) {
var rotation = Math.PI * p.angle / 180;
} else {
var rotation = Math.PI * (360+p.angle) / 180;
}
var costheta = Math.cos(rotation);
var sintheta = Math.sin(rotation);
var canvas = document.createElement('canvas');
var onLoad = false;
if (!p.oImage) {
canvas.oImage = new Image();
canvas.oImage.src = p.src;
canvas.oImage.width = p.width;
canvas.oImage.height = p.height;
onLoad = true;
} else {
canvas.oImage = p.oImage;
}
canvas.style.width = canvas.width = Math.abs(costheta*canvas.oImage.width) + Math.abs(sintheta*canvas.oImage.height);
canvas.style.height = canvas.height = Math.abs(costheta*canvas.oImage.height) + Math.abs(sintheta*canvas.oImage.width);
var context = canvas.getContext('2d');
context.save();
if (rotation <= Math.PI/2) {
context.translate(sintheta*canvas.oImage.height,0);
} else if (rotation <= Math.PI) {
context.translate(canvas.width,-costheta*canvas.oImage.height);
} else if (rotation <= 1.5*Math.PI) {
context.translate(-costheta*canvas.oImage.width,canvas.height);
} else {
context.translate(0,-sintheta*canvas.oImage.width);
}
context.rotate(rotation);
if (onLoad) {
canvas.oImage.onload = function() {
context.drawImage(canvas.oImage, 0, 0, canvas.oImage.width, canvas.oImage.height);
context.restore();
};
} else {
context.drawImage(canvas.oImage, 0, 0, canvas.oImage.width, canvas.oImage.height);
context.restore();
}
我得到的是画布尺寸被正确旋转(我的意思是,旧的宽度变成了新的高度,反之亦然),但图像旋转了 180 度而不是 90 度。
不知道怎么调试。
更新
我注意到,当图像 src 是 http url 时,就会发生奇怪的行为。
如果图像 src 是 blob,则代码可以完美运行。
【问题讨论】:
标签: javascript image html5-canvas image-rotation