返回顶部
首页 > 资讯 > 精选 >怎么使用Node.js判断png图片是否存在透明像素
  • 544
分享到

怎么使用Node.js判断png图片是否存在透明像素

2023-06-20 19:06:23 544人浏览 独家记忆
摘要

这篇文章主要介绍怎么使用node.js判断png图片是否存在透明像素,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!背景png格式的图片存储空间会比jpg格式的图片大,但是png图片的质量明显更好。有时候并不需要图片的

这篇文章主要介绍怎么使用node.js判断png图片是否存在透明像素,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

背景

png格式的图片存储空间会比jpg格式的图片大,但是png图片的质量明显更好。有时候并不需要图片的质量非常的好,但是为了减少包体,需要做一些优化,比如压缩图片,把没有带透明像素的png图片转化成jpg格式的图片。这片文章主要来讲讲怎么利用node.js来检测没有带透明像素的png图片,以及如何把它转化成jpg图片。

代码

import canvas from 'canvas';import fs from 'fs';function hasOpacity(pngPath, limit = 255, isToJpg = false) {  // 获取图片的buffer  const buffer = fs.readFileSync(pngPath);  // 图片的宽度存在buffer的第17到20个字节  const width = buffer.readUInt32BE(16);  // 图片的宽度存在buffer的第21到24个字节  const height = buffer.readUInt32BE(20);  // 创建一个画布  const pnGCanvas = canvas.createCanvas(width, height);  // 拿到画笔  const context = pngCanvas.getContext('2d');  // 创建一张图片  const img = new canvas.Image();  // 记载图片  img.src = buffer;  // 使用画笔把图片画在画布上  context.drawImage(img, 0, 0, width, height);  // 获取png图片的数据的像素数据  let res = context.getImageData(0, 0, width, height);  let imgData = res.data;  // 每个像素占用4个字节,计算出一共有多少像素  // [r, g, b, a]  let piexCount = imgData.length / 4;  // 是否已经找到透明像素  let isOpacity = false;  for (let i = 0; i < piexCount; i++) {    // 遍历每个像素点,找透明通道    let opacity = imgData[i * 4 + 3];    if (opacity < limit) {        // 如果小于limit,则存在透明像素,退出      isOpacity = true;      break;    }  }  // 如果不存在透明像素且isToJpg为true,则转化为jpg格式的图拍呢  if (!isOpacity && isToJpg) {    const out = fs.createWriteStream(pngPath.split('.')[0] + '.jpg');    pngCanvas.createJPEGStream().pipe(out);    out.on('finish', () => console.log(pngPath, '转成jpg成功'));  }  // 返回  return isOpacity;}console.log(hasOpacity('hh.png', 254, true));console.log(hasOpacity('jj.png'));

原理:

canvas采用四个字节存放像素,[r, g, b, a],分别代表红色通道,绿色通道,蓝色通道,透明通道。每个字节是8位,所以每个通道的数据是0~255之间,就透明通道而言,255表示完全不透明,0表示完全透明。我们利用Node.js的buffer和canvas把png图片转化成一个个像素点的数据,然后通过遍历每个透明通道,就可以找到png图片是否带有透明像素。

疑问?为什么有个limit参数?

这是因为在实际应用中,有可能存在少量254、253的透明通过,这些看起来就跟完全不透明的像素一样,所以把他们也当作不是透明像素处理。这个根据自己能够接受的限度去传参。

实例图片

带透明像素

怎么使用Node.js判断png图片是否存在透明像素

不带透明像素

怎么使用Node.js判断png图片是否存在透明像素

以上是“怎么使用Node.js判断png图片是否存在透明像素”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 怎么使用Node.js判断png图片是否存在透明像素

本文链接: https://lsjlt.com/news/299411.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么使用Node.js判断png图片是否存在透明像素
    这篇文章主要介绍怎么使用Node.js判断png图片是否存在透明像素,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!背景png格式的图片存储空间会比jpg格式的图片大,但是png图片的质量明显更好。有时候并不需要图片的...
    99+
    2023-06-20
  • 如何使用Node.js判断png图片是否存在透明像素
    背景 png格式的图片存储空间会比jpg格式的图片大,但是png图片的质量明显更好。有时候并不需要图片的质量非常的好,但是为了减少包体,需要做一些优化,比如压缩图片,把没有带透明像...
    99+
    2024-04-02
  • 使用JavaScript怎么判断元素是否存在
    这篇文章给大家介绍使用JavaScript怎么判断元素是否存在,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为JavaScript引擎,...
    99+
    2023-06-14
  • 怎么用Go判断元素是否在切片中
    这篇文章主要介绍“怎么用Go判断元素是否在切片中”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用Go判断元素是否在切片中”文章能帮助大家解决问题。1.问题如何判断元素是否在切片中,Golang ...
    99+
    2023-07-02
  • oracle怎么判断视图是否存在
    Oracle可以通过查询数据字典表来判断视图是否存在。可以使用以下SQL语句来查询视图是否存在:```sqlSELECT C...
    99+
    2023-10-08
    oracle
  • Node.js 中怎么判断一个文件是否存在
    本篇文章为大家展示了Node.js 中怎么判断一个文件是否存在,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。为什么不推荐 fs.exists我们在设计一个回调函数时...
    99+
    2024-04-02
  • 怎么在linux中素shell 判断文件是否存在
    这期内容当中小编将会给大家带来有关怎么在linux中素shell 判断文件是否存在,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。如果存在某文件,则删除if [ -f tria...
    99+
    2023-06-09
  • 用javascript判断图片是否存在_不存在则显示默认图片的代码
    在网站或应用中,有时候我们需要显示一张图片,但不确定该图片是否存在或者在服务器上是否被删除。这时候,如果直接显示该图片,可能会出现错误的情况。为了解决这个问题,我们可以使用Javascript代码来判断图片是否存在,在图片不存在的情况下,显...
    99+
    2023-05-14
  • php怎么判断数组的元素是否存在
    在PHP中,判断数组元素是否存在的方法非常灵活,可以使用多种方式进行判断。本文将为你介绍PHP中判断数组的元素存在的五种常用方式。使用array_key_exists()函数array_key_exists()函数是PHP中用于检查数组中是...
    99+
    2023-05-14
  • linux怎么判断用户是否存在
    可以使用以下命令来判断Linux系统中是否存在某个用户:1. 使用`grep`命令来搜索`/etc/passwd`文件中的用户名:`...
    99+
    2023-10-10
    linux
  • 使用java怎么判断是否为素数
    使用java怎么判断是否为素数?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对...
    99+
    2023-06-14
  • jquery怎么判断元素是否存在某个属性
    今天就跟大家聊聊有关jquery怎么判断元素是否存在某个属性,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在jquery中,可以利用attr()方法...
    99+
    2024-04-02
  • php怎么判断数组中是否存在重复元素
    PHP是一种运用广泛的脚本语言,广泛应用于Web开发。在PHP开发中,我们经常会涉及到数组这个数据类型。而判断数组中是否存在重复的元素也是一项很重要的任务。在本文中,我们将讨论如何使用PHP判断数组中是否存在重复元素。利用array_cou...
    99+
    2023-05-14
    php php数组
  • 怎么使用shell脚本判断进程是否存在
    可以使用以下方式来判断进程是否存在: #!/bin/bash # 判断进程是否存在的函数 check_process() { ...
    99+
    2024-04-02
  • 怎么用python字典判断key是否存在
    要判断一个键(key)是否存在于一个字典(dictionary)中,可以使用`in`关键字。以下是一个例子,演示如何使用Python...
    99+
    2023-09-28
    python
  • 怎么用sql语句判断表是否存在
    在SQL中,可以使用以下两种方法来判断表是否存在: 使用`IF EXISTS`关键字和`SELECT`语句来查询表是否存...
    99+
    2023-10-24
    sql
  • MySQL中怎么使用SQL语句判断表是否存在
    本篇内容主要讲解“MySQL中怎么使用SQL语句判断表是否存在”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中怎么使用SQL语句判断表是否存在”吧! ...
    99+
    2023-05-25
    mysql sql
  • php注册怎么判断用户名是否存在
    您可以使用以下代码来判断用户名是否已经存在:```php```在上面的代码中,我们首先获取用户输入的用户名(假设是通过 POST 方...
    99+
    2023-10-12
    php
  • linux中怎么用shell判断路径是否存在
    在Linux中,可以使用shell脚本中的test命令来判断路径是否存在。 下面是一个示例脚本,用于判断给定路径是否存在: #!/b...
    99+
    2023-10-27
    linux shell
  • linux中怎么用shell判断进程是否存在
    在Linux中,可以使用shell脚本来判断一个进程是否存在。可以使用`ps`命令来查看当前正在运行的进程,并使用`grep`命令来...
    99+
    2023-10-26
    linux shell
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作