Изображения, переворачивающиеся на бок / вверх ногами после загрузки через PhoneGap (iOS) - PullRequest
6 голосов
/ 20 февраля 2012

Не уверен, что может быть причиной этого, но когда я загружаю некоторые изображения на свой удаленный сервер через FileTransfer(), изображения иногда отображаются либо сбоку, либо вверх ногами. Однако когда я локально просматриваю изображения на iPhone, они располагаются правильно.

Например, когда я выбираю подобное изображение для загрузки: http://sharefa.st/view/WBe2QNSK8r8z

Получится так: http://sharefa.st/view/EWdW1Z4G8r8z

Я использую локальный путь для передачи файла, поэтому я не понимаю, почему изображение будет вращаться «случайно».

Вот моя функция загрузки:

function uploadPhoto() {

    var options = new FileUploadOptions();
    options.fileKey  = 'file';
    options.fileName = imgURI.substr(imgURI.lastIndexOf('/')+1);
    options.mimeType = 'image/jpeg';

    var params = new Object();

    if(logged_in == true) {

        params.unique_id  = app_unique_id; 
        params.secret_key = user_secret_key;

    }

    options.params = params;

    loadingStart();

    var ft = new FileTransfer();

    ft.upload(imgURI, 'http://' + remote_server + '/API/upload', uploadDetails, fail, options);

}

imgURI значение выглядит так:

file://localhost/var/mobile/Applications/<snip>/tmp/photo_015.jpg

Любое понимание приветствуется.

Ответы [ 2 ]

16 голосов
/ 21 февраля 2012

Благодаря гуманоидизму, который указал на то, что проблема на самом деле связана с iPhone, и тем, как он хранит изображения, я смог найти решение.

Чтобы загрузить фотографии в правильной ориентации, вы должны добавитьзначение correctOrientation для массива опций в getPicture() и значение true.

Вот два примера:

function capturePhoto() {

    navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 30, correctOrientation: true });

}

function getPhoto(source) {

    navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 30, 
    destinationType: destinationType.FILE_URI,
    sourceType: source,
    correctOrientation: true });

}
1 голос
/ 21 февраля 2012

Проблема не в PhoneGap, а в iPhone. IPhone был разработан для использования в качестве камеры с широким объективом. Поверните телефон вбок при съемке или захвате видео, если вы собираетесь просматривать их на рабочем столе. Ваш телефон будет отображать их правильно, потому что он «знает», как вы их взяли, но компьютер, на котором вы просматриваете его, нет.

Что вы можете сделать, чтобы предотвратить это, это повернуть изображение перед загрузкой. Это не рекомендуемое исправление, но по крайней мере люди на настольных компьютерах смогут увидеть его. Хотя при просмотре их на iPhone они будут повернуты - может быть, проверка мобильных устройств на наличие или отсутствие поворота изображения может оказаться полезной - но, тем не менее, снова не рекомендуется.

...