Ich lade ein Bild in eine Leinwand; Ich zeichneImage(), speichern Sie getImageData() in eine Variable zum Manipulieren. Ich würde gerne in der Lage sein, die Daten zum Beispiel mehrmals zu manipulieren: verschiedene Filter hinzufügen/entfernen. Wie kann ich die Daten so speichern, dass sie jedes Mal aktualisiert werden, wenn ich das Bild mit putImageData() zeichne?Leinwand/Foto - getImageData funktioniert nicht
Grundsätzlich denke ich, dass ich die Verwendung von getImageData falsch verstehe oder falsch verwende. Mein Gedanke war, dass jede Manipulation, die mit dem Bild gemacht wurde, getImageData ausführen und die Variable, die die Information enthielt, aktualisieren und damit das Bild neu zeichnen konnte.
Beispiel: In den Ausschnitt unten Lets sagen, dass ich eine Funktion ausführen, die das Bild schwarz und weiß drehen. Ich habe eine andere Funktion, die die Größe des Bildes ändert, wenn es angeklickt wird. Wenn ich das Bild verkleinere, verschwindet der Schwarz-Weiß-Filter. Was mache ich falsch, um die Informationen des Bildes zu behalten?
//Read in picture
var reader = new FileReader();
reader.onload = function leDraw(e){
imgObj = new Image();
picWidth = canvas.width/2;
picHeight = canvas.height/2;
imgObj.src = e.target.result;
newX = 0;
newY = 0;
ctx.drawImage(imgObj,0,0, picWidth, picHeight);
imageData = ctx.getImageData(newX,newY, canvas.width, canvas.height);
originalCopy = ctx.getImageData(newX,newY, picWidth, picHeight);
data = imageData.data;
function resize(val){ Resizes picture
userPicHeight = document.getElementById("cSelect").value;
userPicWidth = document.getElementById("cSelect").value;
ctx.clearRect(0,0, canvas.width, canvas.height);
ctx.drawImage(imgObj, newX, newY, userPicWidth, userPicHeight);
window['imageData'] = ctx.getImageData(newX,newY, userPicWidth, userPicHeight);
ctx.putImageData(imageData, newX, newY);
};
Danke, löscht dies einige Dinge für mich und gibt mir ein paar Ideen zu arbeiten. Die eine kleine Sache, die ein Problem für mich bleibt, ist die tatsächliche "Skalierung" in meinem Projekt basiert auf der Benutzereingabe von einem Schieberegler. Darüber hinaus ist das Projekt wie ein Foto-Editor, so dass der Benutzer klicken und ziehen kann, um das Foto zu verschieben, ändern und mehrere Filter hinzufügen.Dieses Beispiel gibt mir definitiv einige Ideen. – swam
Gern geschehen. Ja, ein im Cache gefiltertes Bild-Canvas macht die Größenänderung sehr viel effizienter, da Sie nicht jedes Mal neu filtern müssen. – markE