export function filter(url) {
var c = document.createElement('canvas')
c.id = "canvas_greyscale"
var canvas = new fabric.Canvas('canvas_greyscale')
fabric.Image.fromURL(url, function(oImg) {
c.height = oImg.height
c.width = oImg.width
oImg.filters.push(new fabric.Image.filters.Grayscale())
oImg.applyFilters(canvas.renderAll.bind(canvas))
canvas.add(oImg)
var img = canvas.toDataURL('image/png')
console.log(img)
return img
}, {crossOrigin: "Anonymous"})
}
Tutaj moje płótno jest renderowane z filtrem skali szarości. Nie ma problemu, ale kiedy próbuję przekonwertować płótno na URL, daje mi to płótno bez filtra.Filtr javascript fabricjs nie zwraca przefiltrowanego płótna do adresu URL:
Nie wiem, co jest złego w tutaj ..
Co robię źle. Chcę przekształcić płótna, które mają filtr URL
var img = canvas.toDataURL('image/png')
daje mi obraz bez filtra
Potrzebujesz pomocy
'applyFilters' jest asynchroniczny (dlatego mijamy' renderAll' zwrotnego w nim). Musisz wywołać funkcjęDataURL w wywołaniu zwrotnym, w przeciwnym razie eksportujesz płótno przed zastosowaniem filtru. – Kaiido
możesz pokazać przykład – aryan
Ponieważ to sprawi, że twoja cała funkcja będzie asynchroniczna, będziesz musiał przepisać ją, ale w szerokich liniach: 'filtr funkcji (URL, wywołanie zwrotne) {... (initCanvas) ... var onend = funkcja() {canvas.renderAll(); var img = canvas.toDataURL ('image/png'); callback (img);}; ... Image.fromURL (..., funkcja (oImg) {... oImg.applyFilters (onend); canvas.add (oImg);} ' – Kaiido