2015-04-21 2 views
16

Portrait Bilder, von einigen mobilen Geräten genommen, über ein HTML-Formular hochgeladen bekommt die falsche Ausrichtung während in eine Webseite eingebettet.Drehen Sie hochgeladene Bilder mit EXIF-Ausrichtung in Parse Cloud Code

Dies ist aufgrund der EXIF orientation Metadaten, die zum Beispiel könnte der Wert 6 = Rotate 90 CW sagen, das Bild haben mit einer spezifischen Ausrichtung angezeigt werden. Das Bild selbst - ohne Metadaten - wird jedoch seitlich als horizontales Bild gespeichert. Abhängig vom Image-Renderer sehen Sie das Bild entweder korrekt (als linkes Thumbnail unten) oder ohne die angewendeten Rotations-Metadaten (als das rechte Thumbnail). Bei Bildern, die in Websites eingebettet sind, handelt es sich um Letzteres.

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

Gibt es eine Möglichkeit das hochgeladene Bild zu drehen manuell entweder Javascript oder Node.js, in einem Parse Wolke-Code unter Verwendung von gehosteten Web-App? (Parse Cloud Code nur supports a few dependencies - aber Sie könnten auch kleine Skripte selbst hochladen).

+0

Sie könnten CSS 'transform: rotate (90deg)' verwenden, aber das ist CSS3 Zeug. Bedeutet nicht * HTML5, aber ein Browser, der html5 nicht verarbeiten kann, wird wahrscheinlich nicht mit CSS3 – floribon

+0

@floribon umgehen. Hallo, das Problem ist eigentlich, dass ich die Bilddatei bearbeiten möchte, d. H. Eine gedrehte Version des Bildes auf meinem Server speichern. Allerdings ist der Wunsch nach Nicht-HTML5 nicht wirklich wichtig, wenn ich irgendwie eine Lösung finden kann. – ajgarn

+0

@ajgarn. Ich dachte an einen Hack, der wahrscheinlich wirklich ineffizient ist. Was passiert, wenn wir das Parse Cloud-Modul zum Speichern in png und dann zum Speichern in jpg verwenden? Ich hoffe, dass dies schnell genug erreicht werden kann .... – Stephane

Antwort

0

Ich schrieb eine clientseitige Klasse zum Drehen und Ändern der Größe der hochgeladenen Bilder. Ich verwende das Canvas-Element und HTML5 FileReader.

Quellcode und einige Beispiele finden Sie unter https://github.com/ajgarn/CanvasImageUploader.

Die Klasse gibt Ihnen die Bilddaten (a Blob), die Parse's REST API die gleiche Art und Weise geschrieben werden können, wie Sie eine Datei über Filereader hochgeladen haben würde.

3

Sie sollten npm Module in Cloud-Code verwenden können:

var jpeg = require('jpegorientation'); 

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

Wenn Sie sich nicht: Using npm modules in cloud code

Sobald Sie diese Arbeits haben, das jpegorientation npm Modul Ihren Anforderungen entsprechen sollte Damit die npm-Module funktionieren, können Sie die Bibliothek immer manuell hinzufügen. Wenn Sie Probleme mit dieser Bibliothek und Knoten-gyp laufen, gibt es andere Module zu berücksichtigen:

+1

Danke! Leider hängt [jpegorientation] (https://www.npmjs.com/package/jpegorientation) von [gm] (https://www.npmjs.com/package/gm) ab, das viele Abhängigkeiten hat. Diese in Parse Cloud Code einzuschließen könnte, glaube ich, nicht handhabbar sein.Aber ich werde definitiv [exif-rotate] (https://www.npmjs.com/package/exif-rotate) auschecken, das nur zwei Abhängigkeiten hatte! – ajgarn

+0

@ajgarn, ich sehe das gleiche, haben Sie eine praktikable Lösung gefunden? Wenn ja, können Sie einen Teil des Codes teilen? Vielen Dank! – Stephane

+1

@Stephane: Entschuldigung, ich hatte noch nicht wirklich Zeit, eine Lösung fertigzustellen. Die Anforderungen für meine Anwendung wurden etwas geändert, so dass es einige Zeit in Anspruch nehmen kann. Wenn ich jedoch eine Problemumgehung finde, werde ich sie teilen. – ajgarn

Verwandte Themen