我需要在客户端使用CSS过滤器后保存图片(不使用后端)。 我目前所拥有的:
- 使用CSS过滤器
- 转换为画布
- 使用
var data = myCanvas.toDataURL("image/png");
保存 - 哭泣。 图像没有效果地保存了。
Index.html
<div class="large-7 left">
<img id="image1" src="./img/lusy-portret-ochki-makiyazh.jpg"/><br>
<canvas id="myCanvas"></canvas>
</div>
Photo.js
var buttonSave = function() {
var myCanvas = document.getElementById("myCanvas");
var img = document.getElementById('image1');
var ctx = myCanvas.getContext ? myCanvas.getContext('2d') : null;
ctx.drawImage(img, 0, 0, myCanvas.width, myCanvas.height);
var grayValue = localStorage.getItem('grayValue');
var blurValue = localStorage.getItem('blurValue');
var brightnessValue = localStorage.getItem('brightnessValue');
var saturateValue = localStorage.getItem('saturateValue');
var contrastValue = localStorage.getItem('contrastValue');
var sepiaValue = localStorage.getItem('sepiaValue');
filterVal = "grayscale("+ grayValue +"%)" + " " + "blur("+ blurValue +"px)" + " " + "brightness("+brightnessValue+"%)" + " " + "saturate(" + saturateValue +"%)" + " " + "contrast(" + contrastValue + "%)" + " " + "sepia(" + sepiaValue + "%)" ;
$('#myCanvas')
.css('filter',filterVal)
.css('webkitFilter',filterVal)
.css('mozFilter',filterVal)
.css('oFilter',filterVal)
.css('msFilter',filterVal);
var data = myCanvas.toDataURL("image/png");
localStorage.setItem("elephant", data);
if (!window.open(data)) {
document.location.href = data;
}
}
然而,这样生成的图像没有任何过滤器。
drawImage
才能使滤镜应用于图像数据。另一方面,如果您使用putImageData
,则是手动设置像素,因此滤镜将不会应用。但是,您可以从图像数据中获取图像位图以便在目标画布上绘制,或者使用另一个画布,在其中放置图像数据 - 然后可以在目标画布上绘制该画布。 - Pandaiolo