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

2024-01-02

我希望能够检测徽标类型图像是否具有透明背景,让我们想象两个相似的图像是.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(使用前将#替换为@)

如何确定图像是否在 Javascript 上使用透明度? 的相关文章

  • 如何在 Lambda 中将对象上传到 S3?

    似乎无法将对象上传到 Lambda 中的 S3 本地一切正常 日志中没有错误可以显示出了什么问题 代码如下 console log Loading function var AWS require aws sdk var s3 new AW
  • 如何使用标准 JavaScript 在 CSS 转换结束后立即重新启动它?

    我构建了一种密码生成器 只要倒计时到期 它就会显示新密码 不幸的是 我只设法弄清楚如何运行我的代码一次 倒计时由一个简单的 CSS 过渡组成 我想保留它 因为它比我的其他尝试平滑得多 其中我尝试使用 JavaScript 重复更新宽度 va
  • 使用非常大的背景位置偏移是否存在性能问题?

    我正在构建一个进度条控件 并且正在研究它实际上并不显示进度 而只是旋转 正在发生某事 的指示器的情况 我的设计基本上是交替的对角条纹 本质上是一个像这样的理发杆 但是 旋转 由于希望将尽可能多的负载转移给渲染引擎 我想为此使用 CSS 过渡
  • 多次训练brain.js?

    在第一次训练后 如何将新信息 仅新信息 而不是所有信息 因为这会花费太多性能 训练到我的用 Brain js 制作的神经网络 它有点粗糙 但您可以使用以下结构来实现 如果我们加入 2 个训练数据集 旧数据集与新数据集 然后重新训练keepN
  • 如何使传单圆圈标记可拖动?

    使用传单 我创建了一个L circleMarker我希望它是可拖动的 var marker L circleMarker new L LatLng 48 94603 2 25912 draggable true bindPopup Circ
  • CSS 内边框?

    我纯粹用 CSS 创建了左侧的按钮 它是一个div 中的一个div 然而 右侧的三个按钮是background属性于img标签 我这样做是为了按照以下说明模拟翻转效果here http kyleschaeffer com best prac
  • 每n秒执行一次函数

    我制作了这个在 10 秒后点击链接的代码片段 function timeout window setTimeout function img left click 1000 setTimeout timeout 1000 timeout 我
  • 在 Cordova 中合并文件的多个部分

    在我的 Cordova 应用程序中 我正在下载任意文件 例如图像或视频文件 这是通过 Cordova 文件传输插件和 Range 标头完成的 因为我需要分段下载文件 我的问题是 我想将几 个小 字节 文件合并回原来的文件中 他们曾经在其中使
  • 纯 JS 相当于 Jquery eq()

    jquery 的纯等价物是什么eq 例如 我怎样才能实现 class1 class2 eq 0 text 1254 在纯 JavaScript 中 要获取数组中的元素索引 可以使用 在 JavaScript 中 因此 要重现您的代码 您可以
  • 如何将本地文本文件上传到文本区域(网页内)

    我是一名新手程序员 需要一些帮助来弄清楚如何将本地文本文件上传到我正在构建的网站内的文本区域 我非常精通 HTML CSS 对 Javascript JQuery 有相当的了解 而且我刚刚学习 PHP 您能提供的任何帮助我将不胜感激 我有一
  • 我应该如何实现将状态保存到 localStorage?

    CODE var React require react var Recipe require Recipe jsx var AddRecipe require AddRecipe jsx var EditRecipe require Ed
  • 如何在打字稿中使用外部js

    我通过 Typescript 代码生成 Angular JS 代码 在一种情况下 我需要将外部 JS 文件添加到我的打字稿文件中 并且需要访问 js 文件中的类 我像这样添加js文件
  • 从请求url获取hash参数

    我有这样的网址 http www coolsite com daily plan id 1 http www coolsite com daily plan id 1解析该字符串并读取哈希值 id 之后的值 的最简单方法是什么 谢谢 在客户
  • 如何使用 Javascript OAuth 库不暴露您的密钥?

    看着Twitter OAuth 库 https dev twitter com docs twitter libraries 我看到了这个注释 将 JavaScript 与 OAuth 结合使用时要小心 不要暴露你的钥匙 然后 看着jsOA
  • 如何使用 fetch() 和 WhatWG 流获取文件上传进度

    注意 我并不是在寻找任何替代方案 我知道这可以通过 XMLHttpRequest 来完成 我也不关心浏览器支持 我只想了解新的 即将推出的标准 我有一个File https developer mozilla org en US docs
  • 根据文本内容从 jquery 对象中过滤元素

    我正在尝试使用contains带有 this 关键字 但它给出了错误 JS function var check ul find li filter function return this contains two css color r
  • 如何使用 jQuery 过滤 DropDownList 中的选项

    我有 2 个 DropDownList 第一个 DropDownList 有 4 个选项 第二个 DropDownList 有 20 个选项 我想要一个选项value 1在第一个 DropDownList 中选择我在第二个 DropDown
  • GNUPLOT:尝试提高质量

    如何提高 gnuplot 的质量 看起来这是一个非常低分辨率的图像 这是我正在使用的文件的内容 linkage plot set terminal pdf set out linkage pdf set title Distribution
  • 在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索

    我正在考虑向 Meteor 应用程序添加全文搜索 我知道 MongoDB 现在支持此功能 但我对实现有一些疑问 启用文本搜索功能的最佳方法是什么 textSearchEnabled true 在 Meteor 应用程序中 有没有办法添加索引
  • ‘state’未定义 no-undef

    我使用教程来学习 React 但我很快就陷入困境 在教程中 他们使用以下代码 import React Component from react class Counter extends Component state count 0 r

随机推荐

  • VBA - 在“IF 语句”内嵌套“With 语句”

    语言 VBA MS Access 我在代码中使用用户定义类型 UDT 我希望能够根据状态变量确定我正在将数据加载到 UDT 的哪个部分 我的第一次尝试是使用嵌套在 IF 语句中的 With 语句 这不起作用 我收到一个编译器错误 显示 El
  • 不明白二叉树最大路径和问题的解法

    GeeksforGeeks 网站已推出一个办法 https www geeksforgeeks org find maximum path sum in a binary tree 对于二叉树的最大路径和问题 问题如下 给定一棵二叉树 找到
  • 有条件的 Django 中间件(或如何排除管理系统)

    我想使用我在整个网站上编写的一些中间件 大量页面 因此我选择不使用装饰器 因为我想对所有页面使用代码 唯一的问题是我不想将中间件用于管理代码 并且它似乎对它们很活跃 有什么方法可以配置 settings py 或 urls py 或者代码中
  • 为什么 FormControl#valueChanges 的订阅没有被垃圾收集?

    我浏览过很多帖子说需要取消订阅FormControl valueChanges以防止内存泄漏 我了解取消订阅的 何时 和 如何 Observables 据我了解 产生的 Observablesinfinite需要取消订阅的值的数量以及For
  • 检查 SQL Server 服务器可用性的最快方法是什么?

    我有一个在多个位置使用的 MS Access 程序 它连接到 MS SQL Server 表 但每个位置的服务器名称都不同 我正在寻找最快的方法来测试服务器是否存在 我当前使用的代码如下所示 ShellWait sc ServerName
  • 将 PivotItemHeader 样式应用于 UWP 中的 PivotItem

    我已经创建了一个 PivotItemHeader 样式 其中包含资源中的键 但不知道在哪里应用它 尽管如果我删除 Key 它将应用于所有 PivotItemHeader 但我不想这样做 我只想将此应用到选择枢轴
  • 如何从代码中更改宽高比约束值?

    我在 xib 中为 imageView 指定了 1 2 的长宽比约束 我已经为约束创建了一个 IBOutlet 现在我需要根据某些条件将纵横比更改为 1 1 我想知道除了删除旧约束并放入新约束之外 是否有任何方法可以更改约束的乘数值 我认为
  • iOS 9.x 中嵌入式 Facebook 浏览器的视口/页面高度错误

    当打开demo https mtr github io core layout examples 申请来自核心布局 https www npmjs com package core layout使用 iOS 9 x 至少 上 Faceboo
  • 在 Google 表格的 Google 脚本中的特定表格上使用 onedit() 触发器

    我需要运行由 onedit 触发的脚本 仅对其中的一张进行处理 我已经尝试过以下操作 但目前我无法让脚本仅在所需的工作表 库存 上工作我确信这对于知道的人来说会非常简单 function onEdit e var range e range
  • jQuery 日期选择器,其中文本输入是只读的

    我想使用 Jquery 日期选择器 我已经使用 alt 字段选项进行了设置 我在文本字段中显示 D M Y 但提交 Y M D 到目前为止一切正常 发送正确的数据等 但是我想阻止用户手动输入日期 我最初将 INPUT 字段设置为禁用 该字段
  • 为 QStringListModel 项设置自定义数据

    我有 QStringListModel QStringListModel blocksModel new QStringListModel 以及一个继承自QObject的类 class Block public QObject Q OBJE
  • Flutter Android Studio 调试器跳过框架文件

    是否可以配置 Android Studio Debugger 来跳过 flutter 框架文件和包文件 我对 Step Over 或 Step out 不感兴趣 因为例如在调用调度之后使用 redux 我想逐步跳过直到我编写的减速器 而不遵
  • django-haystack 和 Solr 的拼写建议

    我收到的拼写建议为 无 首先 我在 settings py 文件中设置了这个 HAYSTACK INCLUDE SPELLING True 我已经重建了索引 python manage py rebuild index 并对其进行了良好的更
  • 为什么 Git 子树总是处理每个提交?

    我在用Git 子树 https github com git git blob master contrib subtree git subtree txt在项目之间共享我的源代码的子文件夹 这工作正常 但每次我执行 git 子树推送时 终
  • 在 MATLAB 标记发布中使用 Latex 包

    我使用的是 Mac OSX 10 10 5 和 MATLAB 2015b 现在花了几个小时尝试遵循各种 google 搜索的说明 了解如何导入 LaTeX 包并在其中使用它们MATLAB 的标记 http uk mathworks com
  • NSTableView 的 NSCell 中的鼠标悬停检测?

    我想在将鼠标悬停在表格视图单元格上时更改其文本背景颜色 类似于当您将鼠标悬停在标签名称上时 AddressBook 如何 突出显示 联系人元素的标签 但是我不知道如何实现 检测特定 NSCell 上的鼠标悬停并且 检测到他悬停的单元格后 突
  • Doxygen:使用 C++ 和 VHDL 进行项目的无缝文档

    我正在建立一个关于某种库的文档 该库由 C C 部分和 VHDL 部分以及一些仅包含 doxygen 的指导性页面组成 他们必须被放入一个独立的组中 到目前为止一切正常 漂亮又蓬松 但是如果我想通过使用优化 vhdl 子目录中的输出怎么办O
  • 使用 PowerShell 将前导零添加到文件名

    我有大约 1500 个名为 jpg 的文件 例如 45312 jpg 342209 jpg 7123 jpg 9898923 jpg 或 12345678 jpg 分机号前的总号码应为 8 位 因此 如果文件名少于 8 位 我需要添加前导零
  • 如何在 C# 中从两个 List 中获取移动组合?

    我有两个List
  • 如何确定图像是否在 Javascript 上使用透明度?

    我希望能够检测徽标类型图像是否具有透明背景 让我们想象两个相似的图像是 png文件 但一个具有白色背景 另一个具有透明背景 我如何才能确定具有透明度的文件 我尝试过使用 colorthief 但它没有考虑透明度 所以我想自己做canvas