Wie zeichne ein Foto mit der richtigen Ausrichtung in Canvas nach Aufnahme Foto mit Eingabe [Typ = "Datei"] im mobilen Webbrowser?
Ich bin eine einfache web-app im Handy, die es erlauben Besucher zu erfassen Fotos mit html5 input[type=file] - element. Dann werde ich ihn anzeigen auf der web-Vorschau, und dann können die Besucher wählen, um das Foto hochzuladen auf meinem server für einen anderen Zweck(sprich: hochladen auf FB)
Ich finde, ein problem auf die Ausrichtung der Fotos, wenn ich Fotos mit meinem iPhone und senkrecht halten.Das Foto ist in einer korrekten Ausrichtung in den tag.
Jedoch, wenn ich versuche es zu zeichnen in canvas-Bereich mithilfe der Methode drawImage () - Methode gezeichnet wird 90 Grad gedreht.
Habe ich versucht, auf Foto 4 Lagen, nur einer von Ihnen kann zeichnen ein richtiges Bild im canvas-Bereich, andere sind gedreht oder sogar umgedreht.
Gut, ich bin verwirrt, um die richtige Ausrichtung, um dieses problem zu beheben...
Danke für die Hilfe...
hier ist mein code, meist kopieren von MDN
<div class="container">
<h1>Camera API</h1>
<section class="main-content">
<p>A demo of the Camera API, currently implemented in Firefox and Google Chrome on Android. Choose to take a picture with your device's camera and a preview will be shown through createObjectURL or a FileReader object (choosing local files supported too).</p>
<p>
<form method="post" enctype="multipart/form-data" action="index.php">
<input type="file" id="take-picture" name="image" accept="image/*">
<input type="hidden" name="action" value="submit">
<input type="submit" >
</form>
</p>
<h2>Preview:</h2>
<div style="width:100%;max-width:320px;">
<img src="about:blank" alt="" id="show-picture" width="100%">
</div>
<p id="error"></p>
<canvas id="c" width="640" height="480"></canvas>
</section>
</div>
<script>
(function () {
var takePicture = document.querySelector("#take-picture"),
showPicture = document.querySelector("#show-picture");
if (takePicture && showPicture) {
//Set events
takePicture.onchange = function (event) {
showPicture.onload = function(){
var canvas = document.querySelector("#c");
var ctx = canvas.getContext("2d");
ctx.drawImage(showPicture,0,0,showPicture.width,showPicture.height);
}
//Get a reference to the taken picture or chosen file
var files = event.target.files,
file;
if (files && files.length > 0) {
file = files[0];
try {
//Get window.URL object
var URL = window.URL || window.webkitURL;
//Create ObjectURL
var imgURL = URL.createObjectURL(file);
//Set img src to ObjectURL
showPicture.src = imgURL;
//Revoke ObjectURL
URL.revokeObjectURL(imgURL);
}
catch (e) {
try {
//Fallback if createObjectURL is not supported
var fileReader = new FileReader();
fileReader.onload = function (event) {
showPicture.src = event.target.result;
};
fileReader.readAsDataURL(file);
}
catch (e) {
//Display error message
var error = document.querySelector("#error");
if (error) {
error.innerHTML = "Neither createObjectURL or FileReader are supported";
}
}
}
}
};
}
})();
</script>
InformationsquelleAutor der Frage Rock Yip | 2013-10-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Benötigen Sie zum Lesen der exif-Daten und prüfen Sie, ob exif.Orientierung ist eine der folgenden:
InformationsquelleAutor der Antwort Ben Wong
Ben ' s Super Antwort wies mich in die richtige Richtung, aber soweit ich sagen kann, die eigentliche Rotationen sind falsch (zumindest waren Sie das für mich) und decken nicht alle möglichen Fälle. Die folgende Lösung funktionierte für mich. Es basiert auf der in der JavaScript-Load-Image library (die fand ich über diese große Frage ALSO). Beachten Sie auch, dass ich übersetzen musste, in den Canvas-Kontext, um das Zentrum, es stammt aus der oberen linken Ecke beim drehen).
InformationsquelleAutor der Antwort gburning
hinzufügen exif.js zu Ihrem Projekt, dann:
Die Ausrichtung block (mit translate und rotate) ist kopiert von https://github.com/blueimp/JavaScript-Load-Image/blob/master/js/load-image-orientation.jsund so halte ich es auch bewiesen. Es ist sicherlich arbeitete perfekt für mich, während die anderen Ansätze nicht.
InformationsquelleAutor der Antwort Andy Lorenz
Wenn Sie wollen einfach nur die Orientierung tag, mit exif.js:
In meinen tests, iOS-Kamera gibt nur 1,3,6 oder 8.
InformationsquelleAutor der Antwort Felix Turner
Basierend auf Ihren Antworten, habe ich mir eine Funktion, um automatisch drehen, iphone Foto richtige Richtung.
Geben Sie einfach in einer Eingabe.files[0] und einem optionalen max Breite oder Höhe, es werden Ausgang einen blob verwendet für form Einreichen.
https://github.com/gonnavis/iphone_photo_rotation_adjust
InformationsquelleAutor der Antwort gonnavis