所以我制作了一张图片上传表单,用于拍摄图片并添加叠加层。问题是,如果通过iPhone或Android手机上传图像,由于EXIF数据,图像通常会被错误地旋转。我找到了一种方法将方向映射到一个数字(1-10),但我在网上找到的用于旋转画布的代码似乎并没有起作用。任何帮助将不胜感激。
JS
function showimagepreview(input, ori) {
if (input.files && input.files[0]) {
var filerdr = new FileReader();
filerdr.onload = function(e) {
var img = new Image();
img.onload = function() {
var canvas = document.createElement('canvas'),
ctx = canvas.getContext('2d'),
ratio = img.height / img.width,
maxRatio = 0.6666666666666667;
var width = img.width,
height = img.height;
// transform context before drawing image
switch (ori) {
case 2: ctx.transform(-1, 0, 0, 1, width, 0); break;
case 3: ctx.transform(-1, 0, 0, -1, width, height ); break;
case 4: ctx.transform(1, 0, 0, -1, 0, height ); break;
case 5: ctx.transform(0, 1, 1, 0, 0, 0); break;
case 6: ctx.transform(0, 1, -1, 0, height , 0); break;
case 7: ctx.transform(0, -1, -1, 0, height , width); break;
case 8: ctx.transform(0, -1, 1, 0, 0, width); break;
default: ctx.transform(1, 0, 0, 1, 0, 0);
}
canvas.width = 640;
canvas.height = 640;
drawImageProp(ctx, img, 0, 0, canvas.width, canvas.height); // Centers BG image (similar to background-position: cover)
var img2 = new Image();
img2.onload = function() {
ctx.drawImage(img2, 0, 0, canvas.width, canvas.height);
var data = canvas.toDataURL('image/png'),
preview = document.getElementById('img-preview'),
$img = $('<img id="new-img" src="' + data + '" />'),
$downloadImg = $('#download-img'),
$shareImg = $('#share-img');
$img.css({'border-radius': '6px'})
preview.innerHTML = '';
$img.hide().appendTo(preview).fadeIn(500);
$downloadImg.hide().appendTo(preview).fadeIn(500);
$shareImg.hide().appendTo(preview).fadeIn(500);
$.ajax({
type: "POST",
url: "http://data-uri-to-img-url.herokuapp.com/images.json",
data: {
"image[data_uri]": data.split(',')[1] // ".split(',')[1]" Safely removes Base64 prefix for POST
}
}).done(function(response) {
var url = response['url'],
fbUrl = "https://www.facebook.com/sharer/sharer.php?u=" + url;
$shareImg.find('a').attr('href', fbUrl);
console.log(url);
});
};
img2.src = "http://i.imgur.com/xNpwbZj.png"
}
img.src = e.target.result;
}
filerdr.readAsDataURL(input.files[0]);
}
}
答案 0 :(得分:0)
旋转画布的另一种方法是使用css transform
,它可以像这样旋转度数:
document.querySelector('canvas').style.transform = 'rotate(90deg)';
这样您就可以选择画布并垂直旋转它。现在,您应该能够根据您在那里的数字旋转画布。如果有帮助,请告诉我。