2017-03-11 4 views
1

Ich möchte dem hochgeladenen Bild einen Graufilter hinzufügen. Aber mit img.filter (GREY, 0.3) funktioniert das nicht. Ich weiß, dass img hier ein p5-Element ist, gibt es eine Möglichkeit, nur die Bildquelle auszuwählen und Filter zum hochgeladenen Bild hinzuzufügen?p5.js: Filter zum hochgeladenen Bild hinzufügen

var img,canvas; 
 

 
function setup(){ 
 
    var uploadBtn = createFileInput(imageUpload); 
 
    canvas=createCanvas(500,400); 
 
} 
 
function imageUpload(file){ 
 
    img = loadImage(file.data,function(){ 
 
     image(img,0,0,width,height); 
 
     img.filter(GRAY,0.5); 
 
    }) 
 
    
 
}
<script src="https://github.com/processing/p5.js/releases/download/0.5.7/p5.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.7/addons/p5.dom.min.js"></script>

Antwort

2

Dies ist, weil Sie die Filter nach dem Anzeigen der image.When imageUpload() Funktion anwenden genannt wird, und image(img,0,0,width,height); ausgeführt wird, das img Bild auf der Seite angezeigt wird, aber das ist statische , es wird nicht aktualisiert, wie es wäre, wenn es in draw() wäre und daher die Anwendung des Bildfilters nach der Anzeige des Bildes nichts ändert (das Bild wird nicht aktualisiert, weil es statisch ist). Wenn Sie den exakt gleichen Code in draw() geschrieben haben, würde es funktionieren, weil das wiederholt aufgerufen wird. Um dies zu beheben einfach die Graufilter anwenden, bevor das Bild angezeigt wird:

var img,canvas; 
 

 
function setup(){ 
 
    var uploadBtn = createFileInput(imageUpload); 
 
    canvas=createCanvas(500,400); 
 
} 
 
function imageUpload(file){ 
 
    img = loadImage(file.data,function(){ 
 
     img.filter(GRAY,0.5); 
 
     image(img,0,0,width,height);    
 
    })   
 
}
<script src="https://github.com/processing/p5.js/releases/download/0.5.7/p5.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.7/addons/p5.dom.min.js"></script>

+0

Ich würde umformulieren Ihre Antwort leicht: Es ist nicht, weil 'Upload()' wird nur einmal aufgerufen. Das liegt daran, dass OP den Filter anwendet, nachdem das Bild gezeichnet wurde. Ansonsten ist das die richtige Antwort. –

+0

Ja, ich erwähnte das auch, mein Punkt zu sagen war, dass es mit 'draw()', die wiederholt aufgerufen wird, so was das OP geschrieben wird funktioniert tatsächlich arbeiten in 'draw()', ich werde meinen Beitrag zu bearbeiten mach es klar, danke! –

+1

Hinzufügen von nur Filter nach Bild auch funktioniert http://p5js.org/reference/#/p5/filter - Bild (img, 0,0, Breite, Höhe); Filter (THRESHOLD, 0.5) Danke für deine Antwort. – FBR