javascript - 如何确定图像是否在 Javascript 上使用透明度?

标签 javascript image html5-canvas transparency

我希望能够检测 Logo 类型的图像是否具有透明背景,让我们假设两个相似的图像是 .png 文件,但一个有白色背景,另一个有背景是透明的,怎么判断是透明的呢?

我试过使用 colorthief,但它没有考虑透明度,所以我想在 canvas 上自己做。第一个解决方案是将 png 文件转换为 jpg,如果转换后 jpg 的背景颜色显示为黑色,则它是一个透明的标志,但这对于黑色背景和白色标志的用户来说可能是个问题。有比这更好的解决方案吗?

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]);     
}

最佳答案

通过传递上下文和 Canvas 来使用此函数。然后它将遍历 alpha channel ,直到它找到一个不是完全不透明的条目。

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;
}

注意:如果您的 Canvas 被污染,这将不起作用。

关于javascript - 如何确定图像是否在 Javascript 上使用透明度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45122264/

相关文章:

php - 从数据库 php mysql 检索时图像显示空白

android - 如何根据数据库中的路径设置存储在文件系统中的 ImageView ?

jquery - 将 html5 Canvas 包裹在 <body> 中

javascript - 当我绘制边界框时, Canvas 内渲染的图像消失了?

javascript - 使用 javascript 检查至少 1 个复选框和最多 3 个复选框的复选框验证

javascript - 对父 div 的 Angular 单击不会触发所有子 div

javascript - 如何删除特定的嵌套 json 属性

javascript - 关于 while 语句

c# - 删除(x);它会处理元素 x 吗?

javascript - 强制 Canvas 透明