我正在通過 javascript 創(chuàng)建一個簡單的圖像編輯器,用戶應該能夠旋轉圖像以及應用一些由 Caman js 實現(xiàn)的過濾器。我正在以下畫布中繪制初始圖像:<canvas id="mainCanvas"></canvas>在我的 javascript 中,我有以下用于處理畫布的代碼:var canvasId = 'mainCanvas';var canvas = document.getElementById(canvasId);var ctx = canvas.getContext('2d');為了旋轉圖像,我使用了以下按預期工作的函數(shù):function rotate(degree) { ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.beginPath(); var img = new Image(); img.onload = function() { ctx.save(); ctx.translate(img.width/2, img.height/2); ctx.rotate(degree * Math.PI / 180); ctx.drawImage(img, -img.width/2, -img.height/2, img.width, img.height); ctx.restore(); processHistory('Rotate'); }; img.src = history[lastState]; }我可以多次旋轉圖像,每次旋轉應用于圖像/畫布的當前狀態(tài)時,它都可以正常工作。除了旋轉之外,我還有一個由 Caman js 實現(xiàn)的噪聲按鈕,如下所示:Caman(canvas, val, function() { this.noise(val).render(function() { processHistory('Noise'); }); });在多次旋轉的情況下,我可以多次向圖像添加噪聲,并且每次將噪聲應用于圖像/畫布的當前狀態(tài)。請注意,我的代碼中的 history 是一個用于保存操作圖像狀態(tài)的數(shù)組,函數(shù) processHistory 定義如下:function processHistory(){ history[lastState] = canvas.toDataURL(); lastState = lastState + 1;}問題考慮以下迭代Noise1 --> Rotation --> Noise2,即在原始圖像上應用Noise1,然后應用 Rotation 和另一個 Noise ( Noise2 )。然后Noise2(管道中的第三步)不會應用于圖像的當前狀態(tài)(即帶有Noise1和Rotation的圖像),而是應用于帶有Noise1的圖像。我認為問題應該與Caman.js中定義的render函數(shù)有關,但我無法自己解決。所以它沒有按預期工作,你能幫我修復我的代碼或給我一些關于調試代碼的想法。
Caman.js 渲染適用于以前的狀態(tài)而不是畫布的當前狀態(tài)
慕尼黑8549860
2021-10-14 13:22:39