我希望能够检测徽标类型图像是否具有透明背景,让我们想象两个相似的图像是.png
文件,但一个具有白色背景,另一个具有透明背景,我如何才能确定具有透明度的文件?
我尝试过使用 colorthief 但它没有考虑透明度,所以我想自己做canvas
。第一个解决方案是将png
文件到jpg
如果背景颜色jpg
转换后看起来是黑色的,那么它是一个透明的徽标,但这对于黑色背景和白色徽标的用户来说可能是一个问题。还有比这更好的解决方案吗?
http://jsfiddle.net/9s5qf5cu/ http://jsfiddle.net/9s5qf5cu/
从 png 到 jpg :
var imageLoader = document.getElementById('imageLoader');
imageLoader.addEventListener('change', handleImage, false);
var canvas = document.getElementById('imageCanvas');
var ctx = canvas.getContext('2d');
function handleImage(e){
var reader = new FileReader();
reader.onload = function(event){
var img = new Image();
img.onload = function(){
canvas.width = 100;
canvas.height = 100;
ctx.drawImage(img,0,0, 100, 100);
document.getElementById("image").src = canvas.toDataURL("image/jpeg");
}
img.src = event.target.result;
}
reader.readAsDataURL(e.target.files[0]);
}
通过传递上下文和画布来使用此函数。然后它将循环遍历 Alpha 通道,直到找到并非完全不透明的条目。
function hasAlpha (context, canvas) {
var data = context.getImageData(0, 0, canvas.width, canvas.height).data,
hasAlphaPixels = false;
for (var i = 3, n = data.length; i < n; i+=4) {
if (data[i] < 255) {
hasAlphaPixels = true;
break;
}
}
return hasAlphaPixels;
}
Note:如果您的画布被污染,这将不起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)