ユーザーが選択したフィルターが適用されたビデオ要素があります。スナップショットを撮ろうとすると、ビデオに適用されたフィルターがスナップショットに適用されません。
// live is a video element and snapshot is a canvas
function onTakeSnapshot() {
// Make the canvas the same size as the video
snapshot.width = live.clientWidth;
snapshot.height = live.clientHeight;
// Draw a frame of the live video onto the canvas
var c = snapshot.getContext("2d");
c.drawImage(live, 0, 0, snapshot.width, snapshot.height);
snapshot.style.opacity = 1;
}
たとえば、同じフィルターをスナップショットに適用できることはわかっていますが、snapshot.className='';snapshot.classList.add('grayscale');
ディスクに保存すると同じ問題がvar img = snapshot.toDataURL();
発生します。つまり、フィルターが適用されていない画像になります。現在、画像を個別に操作してgetImageData()\putImageData()
いますが、キャンバス + フィルターとは結果が異なることがよくあります。私はキャンバスが初めてで、フィルターが既に適用されている画像を描画して保存する方法があるかどうか疑問に思っていました。ありがとう!