2015-04-21 11 views
16

Zdjęcia portretowe, pobrane z niektórych urządzeń mobilnych, przesłane za pomocą formularza HTML mają nieprawidłową orientację podczas umieszczania na stronie internetowej.Obracanie przesłanych zdjęć zawierających orientację EXIF ​​w chmurze Parse Cloud Kod

Wynika to z EXIF orientation metadanych, które mogą na przykład mieć wartość 6 = Rotate 90 CW mówiąc obraz ma być wyświetlany z określoną orientacją. Jednak sam obraz - bez metadanych - jest przechowywany na boki jako obraz poziomy. W zależności od renderowania obrazu, obraz zostanie wyświetlony poprawnie (jak w lewej miniaturze poniżej) lub bez zastosowanych metadanych rotacji (jako prawa miniaturka). W przypadku obrazów osadzonych na stronach internetowych jest to drugie.

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

Czy istnieje jakiś sposób, aby ręcznie obracać przesłanego obrazu przy użyciu JavaScript lub node.js, w Parse Kodeksu chmurze gospodarzem aplikację internetową? (Parse Cloud Code only supports a few dependencies - ale nadal możesz przesyłać małe skrypty samemu).

+0

Możesz użyć CSS 'transform: rotate (90deg)', ale to jest CSS3. Nie * oznacza * HTML5, ale przeglądarka, która nie radzi sobie z html5, prawdopodobnie nie będzie obsługiwać CSS3 – floribon

+0

@floribon. Cześć, problem polega właśnie na tym, że chcę edytować plik obrazu, tj. Zapisać obróconą wersję obrazu na mój serwer. To powiedziawszy, chęć nie HTML5 nie jest tak ważna, jeśli w ogóle mogę znaleźć rozwiązanie. – ajgarn

+0

@ajgarn. Zacząłem myśleć o hackach, które prawdopodobnie są naprawdę nieskuteczne. Co się stanie, jeśli użyjemy modułu Parse Cloud, aby zapisać do png, a następnie zapisać z powrotem do JPG? Mam nadzieję, że uda się to szybko osiągnąć ... – Stephane

Odpowiedz

0

Skończyłem na pisaniu klasy po stronie klienta do obracania i zmiany rozmiaru przesłanych obrazów. Używam elementu Canvas i FileReader HTML5.

Kod źródłowy i przykłady można znaleźć na stronie https://github.com/ajgarn/CanvasImageUploader.

Ta klasa podaje dane obrazu (obiekt typu blob), które można opublikować na stronie Parse's REST API w taki sam sposób, jak w przypadku przesłania pliku za pomocą programu FileReader.

3

Powinieneś być w stanie wykorzystać npm modułów kodu cloud: Using npm modules in cloud code

Gdy już, że praca, moduł jpegorientation npm powinny spełniać wymagania:

var jpeg = require('jpegorientation'); 

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

Jeśli nie możesz uruchom moduły npm, możesz zawsze włączyć bibliotekę ręcznie. Jeśli napotkasz problemy z tej biblioteki i węzła-Gyp, istnieją inne moduły do ​​rozważenia:

+1

Dzięki! Niestety [jpegorientation] (https://www.npmjs.com/package/jpegorientation) zależy od [gm] (https://www.npmjs.com/package/gm), który ma wiele zależności. Włączenie ich do kodu Cloud Parse może być niemożliwe do opanowania, jak przypuszczam.Ale na pewno sprawdzę [exif-rotate] (https://www.npmjs.com/package/exif-rotate), który miał tylko dwie zależności! – ajgarn

+0

@ajgarn, Zajmuję się tym samym, czy znalazłeś praktyczne rozwiązanie? jeśli tak, czy możesz udostępnić część kodu? Dzięki wielkie! – Stephane

+1

@Stephane: Przepraszam, nie miałem jeszcze czasu na rozwiązanie. Potrzeby mojej aplikacji zostały nieco zmienione, więc może to zająć trochę czasu, ale kiedy znajdę obejście, podzielę się tym! – ajgarn

Powiązane problemy