Zeichnung Bild auf Leinwand - größer als real
Ich will ziehen Sie ein Bild aus jpg-Datei auf die Leinwand.
Mein code:
var canvas = document.getElementById('my_canvas');
var ctx = canvas.getContext('2d');
var imageObj = new Image();
imageObj.onload = function() {
ctx.drawImage(imageObj, 0, 0);
};
imageObj.src = 'img/my_image.jpg';
Das problem ist, dass das Bild auf Leinwand ist viel größer als in der Datei. Warum? Wie kann ich zeichnen, Bild der echten Größe?
UPDATE:
Ergebnis: http://jsfiddle.net/AJK2t/
InformationsquelleAutor der Frage latata | 2013-04-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist Ihr problem:
Bestimmen Sie die visuelle Größe von der Leinwand, aber nicht die Anzahl der Pixel. Infolgedessen wird der browser die Skalierung der canvas-Pixel.
Die einfachste Lösung ist:
Den
width
undheight
Parameter Steuern Sie die Anzahl der Pixel im canvas-Bereich. Ohne CSS-styling, wird die standardmäßige visual Größe des canvas-Bereichs wird auch in dieser Größe, was in einem canvas-pixel per pixel auf dem Bildschirm (vorausgesetzt Sie haben nicht gezoomt web-browser).Kopieren/einfügen aus meine Antwort auf eine ähnliche Frage:
InformationsquelleAutor der Antwort Phrogz
Beispiel Arbeiten: http://jsfiddle.net/jzF5R/
Um zu skalieren ein Bild, das Sie brauchen, um die skalierte Breite und Höhe, die Sie wollen, um
ctx.drawImage()
:Erhalten original Bild Größe:
Halten canvas aus überquellenden aus der Seite:
Können Sie einfache Skalierung der Bildbreite und-Höhe auf 70% der ursprünglichen:
InformationsquelleAutor der Antwort Alex W
Anzeigen ein MJPEG-stream auf einer Leinwand (oder etwas anderes) ohne zu definieren, die Breite und die Höhe des canvas in HTML, so dass nur die Verwendung von CSS, um eine ansprechende Leinwand und fit mit der Seite, ich benutze das:
Das Bild ist vollständig enthalten in den canvas-Bereich, was die Größe der Leinwand (das Verhältnis zwischen Höhe und Breite ist nicht gehalten, aber es spielt keine Rolle, ein
height:auto;
im css beheben kann).Et voilà !
InformationsquelleAutor der Antwort flgk