JavaScript 生成 dataURL 格式的透明 1X1 像素

2024-03-21

我想知道一种在 JavaScript 中生成单个像素并将其转换为 base64 的方法。理想的函数是:

function createPixel(hexColor, opacity){
   //...Calculate
   return base64DataURL;
}

我对图像处理不是很熟悉。任何格式都可以(png、gif 等)。我想用它来覆盖背景图像,(是的,我可以使用 rgba css3,但我试图将其与背景图像仅放在一个元素上,因此我不会将一个元素覆盖在另一个元素之上以达到效果) 。

提前致谢。

编辑:我不想使用canvas,我确信您可以使用canvas来获取base64 dataURL,但我确信它不如字符串操作那么快。另外,我并不担心将图像转换为 Base64,而是对创建图像更感兴趣。


4 年多后,这里有一个更简单的解决方案,可以生成标准 GIF,因此实际上可以在浏览器中运行(我无法让 PEM 解决方案在其中运行)anything)并且比 PEM/canvas 快一个数量级。唯一的缺点是 GIF 不支持 alpha 不透明度 - 但这可以通过 CSS 进行控制。

它基于这个 JSFiddle http://jsfiddle.net/LPxrT/(未知的美丽作者),但经过基本优化 - 重用 keyStr 并接受十六进制字符串('#FF0000')和十六进制文字(0xFF0000) - 后者更快(谢谢伊克图费).

<html>

<body onload="Test()">
  <script>
    function Test() {
      var img = new Image;
      img.src = createPixelGIF(0xff0000); // generate a red pixel data URI
      img.height = 100;
      img.width = 100; // optional: add dimensions
      document.body.appendChild(img); // add to the page
    }

    // ROUTINES =============

    var createPixelGIF = (function() {

      var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

      return function createPixelGIF(hexColor) {
        return "data:image/gif;base64,R0lGODlhAQABAPAA" + encodeHex(hexColor) + "/yH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==";
      }

      function encodeHex(hexColor) {
        var rgb;
        if (typeof hexColor == 'string') {
          var s = hexColor.substring(1, 7);
          if (s.length < 6) s = s[0] + s[0] + s[1] + s[1] + s[2] + s[2];
          rgb = [parseInt(s[0] + s[1], 16), parseInt(s[2] + s[3], 16), parseInt(s[4] + s[5], 16)];
        } else
          rgb = [(hexColor & (0xFF << 16)) >> 16, (hexColor & (0xFF << 8)) >> 8, hexColor & 0xFF];

        return encodeRGB(rgb[0], rgb[1], rgb[2]);
      }

      function encodeRGB(r, g, b) {
        return encode_triplet(0, r, g) + encode_triplet(b, 255, 255);
      }

      function encode_triplet(e1, e2, e3) {
        enc1 = e1 >> 2;
        enc2 = ((e1 & 3) << 4) | (e2 >> 4);
        enc3 = ((e2 & 15) << 2) | (e3 >> 6);
        enc4 = e3 & 63;
        return keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);
      }

    })();
  </script>
</body>

</html>

更新的 JSPerf 结果:http://jsperf.com/base64image/4 http://jsperf.com/base64image/4(上面的代码是“createPixelGIF2”)。你会看到我尝试了进一步的优化(3+4),但似乎 JS 更喜欢堆栈操作而不是难以阅读的组合函数:)

我还添加了对画布方法的更新测试,由于某种原因,该测试排除了画布对象的实例化 - 这是在现实世界使用中看到的最大性能拖累。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 生成 dataURL 格式的透明 1X1 像素 的相关文章

  • 获取express.js中间件请求中“#”后的url

    我需要获取服务器中间件上的 url 使用express js 我用req url但是当 url 开头时 some urlreq url 返回 与req path 有没有办法获取url之后 在express js中 No URL 中以 符号永
  • 如何在通过 .ajaxForm() 提交表单之前执行一些操作?

    我正在使用 ajaxForm 框架来发送我的数据 而无需重新加载我的页面 ReplayForm ajaxForm success function data alert Success 现在 我想在提交表单之前检查一些条件 如果条件为假 则
  • 使用 Firefox 插件 sdk 的 nsISocketTransportService

    我正在尝试使用 Firefox 来读取 SSH 横幅 IE 当您最初连接到 SSH 服务器时 服务器会向您发送其横幅 标识服务器软件 并且您向 SSH 服务器发送您的横幅 标识您的客户端软件 为此 我使用以下 URL 中的示例 firefo
  • Mapbox GL 中的 MaxBounds 和自定义非对称填充

    我有一个 Mapbox GL JS 应用程序 在地图上显示一些小部件 为了确保地图上的任何内容都不会被它们隐藏 我使用以下命令添加了一些填充map setPadding 这是一个不对称的 在我的例子中左边比右边大 它按预期工作 例如fitB
  • 如何在不阻止触摸启动的情况下防止“过度滚动历史导航”?

    我正在实现基于滑动的导航 但我在使用 Chrome 时遇到了麻烦 当页面向右拖动时 会触发新实现的功能 过度滚动历史导航 从而导致跳回 到 历史 1 为了防止这种情况 我必须打电话 preventDefault on touchstart
  • 如何使 d3 饼图响应式?

    我有一个 PIE 图表 它工作正常 但我无法使其具有响应能力和可调整大小 我需要它与移动浏览器和 iPad 等兼容 div div
  • 检测 Google 验证码的挑战窗口何时关闭

    我正在使用谷歌隐形验证码 有没有办法检测挑战窗口何时关闭 我所说的挑战窗口是指您必须选择一些图像进行验证的窗口 目前 我在按钮上放置了一个旋转器 一旦单击按钮 就会呈现验证码挑战 无法向用户提示另一个质询窗口 我以编程方式调用渲染函数 gr
  • JS 保留以零结尾的小数[重复]

    这个问题在这里已经有答案了 在JavaScript中 是否可以 锁定 十进制数 以保留以零结尾的 浮点数 例如 我有 2 个不同的数字 如下所示 伪代码 let a 1 0 let b 1 00 a b true should be fal
  • React JS 服务器端问题 - 找不到窗口

    你好 我正在尝试在我的reactJS项目中使用react rte 我有服务器端渲染 每次我想使用这个包时 我都会得到 return msie 6 9 b test window navigator userAgent toLowerCase
  • 如何在 React Native 上显示 SVG 文件?

    我想显示 svg 文件 我有一堆 svg 图像 但我找不到显示的方式 我尝试使用Image and Use的组成部分反应本机 svg https github com magicismight react native svg但他们不这样做
  • 如何使用 window.onerror 捕获所有 javascript 错误? (包括道场)

    这个问题是后续问题javascript 如何在弹出警报中显示脚本错误 https stackoverflow com questions 2604976 javascript how to display script errors in
  • webpack中动态加载外部模块失败

    我正在尝试建立以下架构 一个核心 React 应用程序 它具有一些基本功能 并且能够在运行时加载其他 React 组件 这些额外的 React 组件可以按需加载 并且它们在构建核心应用程序时不可用 因此它们不能包含在核心应用程序的捆绑包中
  • 呃!尝试将包发布到 npm 时出现 403

    我正在尝试将包发布到 npm 您可以在此处查看存储库 https github com biowaffeln mdx state https github com biowaffeln mdx state 我登录到 npmnpm login
  • 如何重复 ajax 请求,直到满足 RxJS Observable 的条件?

    我正在尝试重复请求 直到响应包含使用 RxJS 的数据 此时我想调用成功 或失败 处理程序 但我在使用 RxJS 时遇到了麻烦 这是我目前的方法 redux observable action observable mergeMap gt
  • 使用 ref 触发反应 dropzone 不起作用

    我正在实现这个库 https github com felixrieseberg React Dropzone Component https github com felixrieseberg React Dropzone Compone
  • PDF 在 Safari 中隐藏 Jquery Modal

    这是与我有关的事情this https stackoverflow com questions 24052681 pdf hide jquery modal in ie问题 在 IE 中 我在对话框中使用 iframe 解决了问题 所以它工
  • Jwt 签名和前端登录身份验证

    我有这个特殊的 jwt sign 函数 Backend const token jwt sign id user id process env TOKEN SECRET expiresIn 1m res header auth token
  • d3.event.translate 在触摸设备的缩放上包含 NaN

    我使用 d3 为我的 svg 编写了一个自定义缩放函数 如下所示 Zoom behavior function myzoom xpos d3 event translate 0 ypos d3 event translate 1 vis a
  • ng-include 和 ng-view 不同时加载

    下面是我的应用程序的结构 很简单 页眉和页脚是非常小的文件 而主页上的 ng view 要大得多 当我进入该页面时 我注意到了这一点 首先加载两个 ng include 然后 ng view 出现 页脚被推到底部 页脚闪烁大约 0 1 秒
  • 将多维数组转换为单数组(Javascript)

    我有一个对象数组 来自 XLSX js 解析器 因此其长度和内容各不相同 表示已给予项目的资助 简化后 它看起来像这样 var grants id p 1 location loc 1 type A funds 5000 id p 2 lo

随机推荐

  • PyQt 4 UI 冻结

    下面的程序应该只是累加和 int 并在标签中显示其值 但过了一会儿 GUI 停止工作 而循环继续 from PyQt4 import QtGui QtCore import sys class main window QtGui QWidg
  • JavaScript 中的“可绑定”变量?

    从我对 Flex 的一点经验中 我了解了可绑定变量 例如 文本元素的内容会随着变量的值而变化 我想知道是否可以在 JavaScript 中做这样的事情 例如 假设我有一个 h1 我想包含文档的标题 这可以很容易地完成document get
  • “equal”模板功能是如何实现的? (谓词版本)

    我正在阅读 Accelerated C 一书 其中一个练习要求我们模拟标题中的 equal 函数 到目前为止 我已经实现了简单的版本 它采用三个参数 如下所示 template
  • 禁用适用于平板电脑和 iPad 的 Magento 移动主题

    我制作了一个包含桌面和移动主题的网站 它工作得很好 但在平板电脑和 iPad 中它显示了我不想要的移动主题 所以我使用以下异常 iPhone iPod BlackBerry Pre Palm Googlebot Mobile mobi Sa
  • 不同 django 模型的公共字段集中在一处

    我有一些在多个模型中重复的列 有什么解决方案可以将它们放置在某个地方并使用任何模型吗 您可以通过创建基类并在模型中继承它们来实现这一点 Example class TimestampsModel models Model classmeth
  • Java Swing 在 Eclipse Oxy 4.7.3a 上运行?

    我正在尝试在 macOS high Sierra 上的 eclipseoxygen 4 7 3a 中使用 windowbuilder 它安装得很好 但每次我尝试打开设计部分时 它都会显示此错误 Eclipse 在 0 下运行 但是这个 Ja
  • 在 select2 上设置标签值

    我的页面上有选择字段
  • 从数据库中删除文件和相应条目

    我有一个处理文件管理的网站 用户可以上传文件 添加描述 编辑和删除 这种情况的最佳实践是什么 我将文件存储在文件系统中 我该如何处理文件的删除 在这种情况下 我必须删除实体 数据库中的文件和条目 第一种情况是我删除文件 如果没有错误 我从数
  • 从 Tokio 应用程序使用 Actix:混合 actix_web::main 和 tokio::main?

    目前我主要写的是异步示例Reqwest library https crates io crates reqwest tokio main async fn main gt Result lt Box
  • Caliburn.Micro DisplayRootViewFor 抛出 NullReferenceException

    我的引导程序中有以下代码 private SimpleContainer container protected override void Configure container new SimpleContainer container
  • 从方法返回元组

    我正在编写一个方法 成功时返回一个元组 但是None失败时 我还没有最终确定None 作为失败案例返回 但它是选择之一 我们可以回来吗 1 1对于失败案例 我正在寻找最好的Pythonic方法来实现这一点 以便拆包很容易 请让我知道我们如何
  • 如何添加链接来下载pdf文件nuxt?

    我只想在 nuxt 项目中添加一个下载 pdf 文件的链接 我怎么做 我已经尝试过以下方法 a class btn btn sm btn sub color Download a 它适用于图像 但不适用于 pdf 文件 我发现vue pdf
  • 如何使用 Maven 构建可运行的 JavaFX 应用程序?

    我是 JavaFX 新手 我使用 Maven 创建了一个 Hello World 项目 当我在 Eclipse 中运行它时 它工作得很好 public static void main String args launch args Ove
  • 将类元素更改为界面元素

    当对类图进行建模时 工具箱包含类和接口的特殊对象 它们的不同之处在于它们的图标 这些图标显示在Project Browser如果它们被添加到图表中 它们的属性似乎是相同的 是否可以更改创建为的对象class到一个类型的对象interface
  • 如何在测试已弃用的 Scala 函数时抑制弃用警告?

    假设我有一个库 其中包含已弃用的函数和首选函数 object MyLib def preferredFunction deprecated Use preferredFunction instead 1 0 def deprecatedFu
  • Matlab:如何导出voronoi图中多边形的顶点(坐标)?

    我手头有一个创建的函数文件 它是在图像中画线 img drawline point1 point2 color img 它用于连接图像内的任意两点 我被要求在图像中创建 voronoi 图 不使用绘图功能 目前 我正在尝试显示图像中的线条
  • 解密xml文档时出现问题

    我编写了一些代码来加密包含用户凭据的 XML 配置文件 以及解密该文件的代码 当我在本地计算机上同时运行加密和解密时 它按预期工作 但是 当我部署程序时 仅使用解密代码 xml 文件将无法解密 我收到加密异常 错误数据 这是我的代码 pub
  • FutureWarning:不推荐使用非元组序列进行多维索引,使用“arr[tuple(seq)]”

    我搜索过 S O 但找不到答案 当我尝试使用 seaborn 绘制分布图时 我收到了未来警告 我想知道这里可能出了什么问题 import pandas as pd import numpy as np import seaborn as s
  • 为什么 PHP 中的 _GET 会错误地解码斜杠?

    今天我遇到了 PHP 的一些奇怪问题 我在文档中找不到正确的解释 考虑以下代码 代码很简单 它在 url 上采用单个 t 参数并将其输出回来 因此 如果您使用 test php t 5Ca 5c 是 调用它 我希望看到 a 然而 这就是我得
  • JavaScript 生成 dataURL 格式的透明 1X1 像素

    我想知道一种在 JavaScript 中生成单个像素并将其转换为 base64 的方法 理想的函数是 function createPixel hexColor opacity Calculate return base64DataURL