Холст рисует повернутое изображение
Я пытаюсь использовать javascript, чтобы сделать снимок с помощью моего iphone и нарисовать изображение на холсте. Я использую
<input type="file" capture="camera" accept="image/*" id="takePictureField">
mobilePictureGet);
Использовать камеру. Как только я выберу картинку
document.getElementById("takePictureField").addEventListener('change', function(e) {
if(e.target.files.length == 1 && e.target.files[0].type.indexOf("image/") == 0) {
img.src = URL.createObjectURL(e.target.files[0]);
}
}
Это срабатывает, и изображение появляется так, как я хочу, чтобы оно было в теге. (пока все хорошо), однако я рисую его на холсте, когда загружается тег img:
img.onload = function() {
ctx.drawImage(img, 0, 0, img.width,img.height);
}
И он кажется повернутым на 90 градусов. Я пытался
var x = width / 2;
var y = height / 2;
var angleInRadians = Math.PI / 2;
ctx.translate(x, y);
ctx.rotate(angleInRadians);
ctx.drawImage(img, -width / 2, -height / 2, img.width, img.height);
ctx.rotate(-angleInRadians);
ctx.translate(-x, -y);
Но я никак не могу подогнать его под себя.
Кто-нибудь знает, почему холст был бы нарисовать изображение повернутым? Любая помощь, чтобы получить картину, нарисованную правильно на холсте, очень ценится!!
Спасибо!
2 ответов:
Это, вероятно, зависит от того, как вы держите телефон. Эта информация (ориентация) хранится в данных exif изображения, и вы должны повернуть его соответствующим образом.
Одна библиотека, которая может помочь вам в этом, - это JavaScript Load Image
Я никогда не пытался сделать снимок с помощью javascript, но я занимаюсь разработкой мобильных устройств ios.
Причина, по которой изображение выходит боком, заключается в том, что apple считает, что удержание телефона с кнопкой home, обращенной вправо, является единственным приемлемым способом сделать снимок. Это также известно как состояние "вверх".
Дополнительную информацию о том, почему ваш iPhone делает снимки сбоку, можно найти здесь: http://rotatemailer.com/sideways-pictures.html
В ios его очень легко вращать, поэтому в javascript я не очень уверен, как это правильно сделать.
Comments