- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一个 jquery 图像橡皮擦插件,可以删除实际图像的一部分。例如,如果用户上传了猴子的图像并决定他不想要尾部,那么他应该能够将鼠标移到尾部上并将其删除。为了简单起见,我们假设所有图像都是黑白的,背景始终是白色的。
我搜索了相当长一段时间,大多数“jquery橡皮擦”插件都指向 Canvas 橡皮擦,而不是真正的图像橡皮擦。例如:http://minimal.be/lab/jQuery.eraser/这会在图像顶部创建一个 Canvas ,然后您可以删除 Canvas - 这不是要求
stackoverflow 上的其他几个线程很有趣:比如 How to erase partially image with javascript and result of erase pixel is transperent?
有没有一个插件可以用canvas做到这一点
最佳答案
我不知道有哪个非 Canvas 插件只能删除图像。
我认为没有canvas元素在客户端很容易完成,因为html5canvas是唯一可以在像素级别编辑现有图像然后保存编辑后的图像的 native 元素。
正如您所发现的,使用 html5 canvas 很容易做到:
drawImage
将图像绘制到 Canvas 元素上,destination-out
合成让用户删除部分图像,.toDataURL
将编辑后的 Canvas 转换为实际的 img 元素这是一个简单的概念验证供您开始:
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
function reOffset(){
var BB=canvas.getBoundingClientRect();
offsetX=BB.left;
offsetY=BB.top;
}
var offsetX,offsetY;
reOffset();
window.onscroll=function(e){ reOffset(); }
window.onresize=function(e){ reOffset(); }
var img=new Image();
img.crossOrigin='anonymous';
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/multple/monkey.jpg";
function start(){
canvas.width=img.width;
canvas.height=img.height;
ctx.drawImage(img,0,0);
ctx.globalCompositeOperation='destination-out';
$("#canvas").mousedown(function(e){handleMouseDown(e);});
$("#save").click(function(){
alert('This save-to-image operation is prevented in Stackoverflows Snippet demos but it works when using an html file.');
var html="<p>Right-click on image below and Save-Picture-As</p>";
html+="<img src='"+canvas.toDataURL()+"' alt='from canvas'/>";
var tab=window.open();
tab.document.write(html);
});
}
function handleMouseDown(e){
// tell the browser we're handling this event
e.preventDefault();
e.stopPropagation();
var x=parseInt(e.clientX-offsetX);
var y=parseInt(e.clientY-offsetY);
ctx.beginPath();
ctx.arc(x,y,15,0,Math.PI*2);
ctx.fill();
}
body{ background-color: white; }
#canvas{border:1px solid red;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<h4>Click on image to erase 10 pixels around mouse</h4>
<canvas id="canvas" width=300 height=300></canvas>
<br>
<button id='save'>Save edited canvas as an image</button>
关于javascript - Jquery 图像橡皮擦插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31838360/
有一种实现橡皮擦的方法(除了使用白色铅笔?)。 我正在使用分层,我在 Canvas 下方有一个图像,因此,如果橡皮擦涂成白色,用户会注意到,因为下面的图像不是纯白色。 最佳答案 https://dev
我在 iPad 应用程序中使用 UIBezierPath 进行自由手绘。我想在 uibezierpath 上使用橡皮擦. 但是,我想仅删除其路径中的绘图。我不能使用路径颜色作为背景颜色,因为背景上有其
好的,几个月前我构建了一个绘图系统,基本上可以让用户在 Canvas 上绘图。我包含的一些功能包括使用用户定义的颜色和笔触大小、橡皮擦和撤消/重做进行绘图。 我刚刚检查了一些项目以查看它们仍然如何运作
我是一名优秀的程序员,十分优秀!