bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Поворачивает фото в iOs Safari на Canvas?

Здравствуйте, подскажите пожалуйста. На iOS в Safari поворачивает фото когда его загружаю в Canvas на 90 градусов. Нагуглил что это проблема в метаданных фото. Может подскажите решение? Спасибо.
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
JRK_DV
@JRK_DV
Рецепты https://codepen.io/jrkdv/full/LKLXdq
Если не охота тянуть либы, то есть такой кусок. Правда давненько это писалось, как сейчас работает - не знаю
// ...
getOrientation(file, function(orientation) {
  if (orientation == 8) { // -90deg
    $modal.trigger('image-action', [['left']]);
  }
  else if (orientation == 6) { // 90deg
    $modal.trigger('image-action', [['right']]);
  }
  else if (orientation == 3) { // -180deg
    $modal.trigger('image-action', [['left']]);
    $modal.trigger('image-action', [['left']]);
  }
});
// ...

getOrientation
function getOrientation(file, callback) {
  var reader = new FileReader();
  reader.onload = function(e) {
    var view = new DataView(e.target.result);
    if (view.getUint16(0, false) != 0xFFD8) return callback(-2);
    var length = view.byteLength/2, offset = 2;
    while (offset < length) {
      var marker = view.getUint16(offset, false);
      offset += 2;
      if (marker == 0xFFE1) {
        if (view.getUint32(offset += 2, false) != 0x45786966) return callback(-1);
        var little = view.getUint16(offset += 6, false) == 0x4949;
        offset += view.getUint32(offset + 4, little);
        var tags = view.getUint16(offset, little);
        offset += 2;
        for (var i = 0; i < tags; i++)
          if (view.getUint16(offset + (i * 12), little) == 0x0112)
            return callback(view.getUint16(offset + (i * 12) + 8, little));
      }
      else if ((marker & 0xFF00) != 0xFF00) break;
      else offset += view.getUint16(offset, false);
    }
    return callback(-1);
  };
  reader.readAsArrayBuffer(file);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект