2015-04-21 5 views
16

Портретные фотографии, взятые с некоторых мобильных устройств, загружаемых с помощью HTML-формы, попадают в неверную ориентацию, когда они встроены в веб-страницу.Поворот загруженных изображений, содержащих ориентацию EXIF, в Парке облачного кода

Это связано с EXIF orientation метаданных, которые могли бы, например, иметь значение 6 = Rotate 90 CW говоря изображение, которое будет отображаться с определенной ориентацией. Однако само изображение - без метаданных - хранится боком в виде горизонтального изображения. В зависимости от средства визуализации изображений вы либо увидите изображение правильно (в качестве левого миниатюры ниже), либо без примененных метаданных вращения (в виде правого миниатюры). Для изображений, встроенных в веб-сайты, это последний.

Portrait picture with EXIF orientation Rotate 90 CW, displayed with and without metadata applied

Есть ли способ, чтобы повернуть загруженную картинку вручную с использованием либо Javascript или Node.js, в синтаксическое Облако кодекса размещается веб-приложение? (Только код облака разбора supports a few dependencies - но вы все равно можете загружать небольшие скрипты).

+0

Вы можете использовать CSS 'transform: rotate (90deg)', но это материал CSS3. Не означает * HTML5, но браузер, который не может обрабатывать html5, скорее всего, не будет обрабатывать CSS3 – floribon

+0

@floribon. Привет, проблема в том, что я хочу отредактировать файл изображения, т. Е. Сохранить повернутую версию изображения на моем сервере. Тем не менее, желание не-HTML5 не так важно, если я смогу найти решение во всяком случае. – ajgarn

+0

@ajgarn. Я подумал о взломе, который, вероятно, неэффективен. Что делать, если мы будем использовать модуль Parse Cloud для сохранения в png, а затем сохранить обратно в jpg? Я надеюсь, что это может быть достигнуто достаточно быстро, хотя .... – Stephane

ответ

0

В конце концов я написал класс на стороне клиента для поворота и изменения размера загруженных изображений. Я использую элемент Canvas и HTML5 FileReader.

Для исходного кода и некоторых примеров см. https://github.com/ajgarn/CanvasImageUploader.

Класс дает вам данные изображения (Blob), которые могут быть отправлены на Parse's REST API так же, как вы загрузили файл через FileReader.

3

Вы должны быть в состоянии использовать npm модули в облаке код: Using npm modules in cloud code

После того, как вы получили, что работает, модуль jpegorientation НПМ должен соответствовать вашим требованиям:

var jpeg = require('jpegorientation'); 

jpeg.autoRotate('image.jpg', function (err) { 
    // error handler 
}); 

Если вы не можете получить модули npm, вы всегда можете включить библиотеку вручную. Если у вас возникли проблемы с этой библиотекой и узлом-лавочка, есть и другие модули, чтобы рассмотреть:

+1

Спасибо! К сожалению [jpegoientation] (https://www.npmjs.com/package/jpegorientation) зависит от [gm] (https://www.npmjs.com/package/gm), который имеет много зависимостей. Полагаю, что включить их в Parse Cloud Code можно было бы неуправляемо.Но я обязательно проверю [exif-rotate] (https://www.npmjs.com/package/exif-rotate), который имел только две зависимости! – ajgarn

+0

@ajgarn, я смотрю то же самое, нашли ли вы работоспособное решение? если да, можете ли вы поделиться некоторыми из кода? Спасибо! – Stephane

+1

@Stephane: К сожалению, я еще не успел закончить решение. Потребности в моем приложении несколько изменились, поэтому может потребоваться некоторое дополнительное время, но когда я найду обходное решение, я поделюсь им! – ajgarn