Vielen Dank für einen Blick.HTML 5 Canvas] Bildqualität, wenn ich die Größe ändere
Was ich hier versuche ist ... Laden Bild von Computer (mit FileReader), legen Sie img-Tag src in die Datei. Dann zeichne Leinwand mit diesem Bild.
function previewFile(){
var preview = document.querySelector('img'); //selects the query named img
var file = document.querySelector('input[type=file]').files[0]; //sames as here
var reader = new FileReader();
reader.onload = function() {
preview.src = reader.result;
drawCanvas();
}
if (file) {
reader.readAsDataURL(file); //reads the data as a URL
} else {
preview.src = "sample.jpg";
}
}
previewFile(); //calls the function named previewFile
window.onload = function() {drawCanvas(); };
function drawCanvas() {
var img = document.querySelector("img");
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext('2d');
ctx.filter = window.getComputedStyle(document.querySelector("img")).filter;
ctx.drawImage(img, 0, 0);
}
Problem ist, wenn ich eine andere Bilddatei laden. Es wird in die Leinwand geladen, passt aber nicht in die Leinwandgröße. Es behält die ursprüngliche Bildgröße und "Teil" des Bildes wird in der Leinwand angezeigt.
Um es zu lösen, versuchte ich folgendes: ctx.drawImage (img, 0, 0, document.getElementById ('Leinwand') Breite,
document.getElementById ('Leinwand') Höhe..);
Es funktioniert, aber die Bildqualität wird wirklich schlecht ... da es nicht Originalbildgröße ist. Es ist auf die bestimmte Höhe eingestellt und muss in der Größe angepasst werden.
Alles, was ich tun möchte, ist ... behalten Sie die ursprüngliche Leinwandgröße (Breite: einige px; Höhe: Auto), also wenn ich das Bild lade, passt es an die Leinwand Breite und Höhe angepasst.
Würden Sie mir bitte helfen? Vielen Dank.
AddedIch recherchieren mich und folgende gefunden: Ich kam mit einer Idee - zuerst die Bildgröße auf der aktuellen Breite der Leinwand basierend ändern.
var img = document.querySelector("img");
var canvas = document.getElementById("image");
var ratio = img.height/img.width;
img.width = canvas.offsetWidth;
img.height = img.width * ratio;
Zeichnen Sie dann mit dem bearbeiteten Bild.
var ctx = canvas.getContext('2d');
ctx.filter = window.getComputedStyle(img).filter;
ctx.drawImage(img, 0, 0, img.width, img.height);
Dann habe ich das Problem gefunden. Ich überprüfte "img.height" Variable ist 199px. Aber die Höhe der Leinwand wird irgendwie 150px. Ich überprüfte und es gibt keine CSS auf der Leinwand überhaupt.
Diesmal stelle ich die Leinwandbreite vor drawImage().
Und wieder, das ursprüngliche Bild kommt zurück ... und "Teil" des Bildes wird in der Leinwand gezeigt. Die Größe der Leinwand ist, was ich wollte, aber ...
Mögliche Duplikate von [Canvas ist gestreckt, wenn CSS verwendet wird, aber normal mit "width"/"height" Eigenschaften] (http://stackoverflow.com/questions/2588181/canvas-is-stretched-when-using-css- but-normal-with-width-height-Eigenschaften) – Kaiido
Bitte versuchen Sie eine funktionierende Demo zu erstellen (zur Zeit fehlen einige wichtige Teile wie HTML und CSS). – Kaiido