PNG图片压缩-UPNG.js参数说明及示例

UPNG.js是一个非常轻量且高效的库,用于处理PNG图像。它可以编码和解码PNG图片,同时支持压缩和解压缩功能。特别适合在前端项目中处理图像,尤其是在需要优化图像大小而不牺牲质量时。

UPNG.encode()函数是UPNG.js中用于将图像数据编码成PNG格式的函数,参数如下:

UPNG.encode(imgs, w, h, cnum, dels, forbidPlte)

imgs:图像数据。它是一个Uint8Array数组的数组,其中每个Uint8Array代表一个图像帧的RGBA像素数据。

w(width):生成的PNG图像的宽度(以像素为单位)。

h(height):生成的PNG图像的高度(以像素为单位)。

cnum:颜色数量。这个参数决定了输出PNG的颜色深度。比如,将其设置为256会生成8位颜色的PNG图像。特别地,设置为0会让UPNG.js自动选择最优的颜色数量。

dels:帧延时数组,仅当imgs包含多个帧以生成动画PNG时有效。每个元素代表对应帧的延时时间(以毫秒为单位)。

forbidPlte(可选):这是一个布尔值参数,当设置为true时,会禁止生成带有调色板(palette)的PNG。调色板PNG通常用于压缩图像大小而不是质量,但不是所有场景都需要或希望使用调色板。

 

  • 低颜色复杂度:如果你的图像具有很少的颜色(例如图标、简单图形、拥有大块单色区域的图片),则使用较低的cnum值(比如16、64或128)可能是合适的。这样可以减小文件大小,同时保持质量。
  • 高颜色复杂度:对于颜色渐变丰富、细节复杂的照片,低cnum值可能导致质量明显下降。对于这类图片,较高的cnum值或者自动选择(cnum=0)更合适。
  • 网页用途:对于网页用途,你可能希望图像尽可能小以加快页面加载速度。开始可以尝试中等cnum值(如256),根据结果调整或考虑自动选择。
  • 打印或高质量展示:当图像质量是首要考虑时,应优先考虑较高的cnum值,甚至自动选择,以尽可能保留原图的质量和细节。

 

当cnum设置为0时,UPNG.js试图自动确定最佳颜色数以平衡大小和质量,但这并不总能得到最小文件大小。因为自动选择可能会倾向于保留更多的颜色以保证质量,而这有时会导致文件大小的增加,尤其是对于本来就有很多颜色的图片。

 

cnum(颜色数量)的取值范围是从0到32767。具体取值范围如下:

  • 0:自动选择颜色数量,UPNG.js将尝试自动确定最佳的颜色数量以平衡文件大小和图像质量。
  • 1 - 255:指定一个固定的颜色数量。较小的值会产生更小的文件大小,但可能会降低图像质量。
  • 256 - 32767:当cnum大于255时,UPNG.js将尝试最小化文件大小,同时保持足够高的图像质量。

 

示例:

function handlePNG(file) {const reader = new FileReader();reader.onload = function (e) {try {const arrayBuffer = e.target.result;const decodedImg = UPNG.decode(arrayBuffer); // 解码const rgba = UPNG.toRGBA8(decodedImg); // 转换为RGBA数组,每个帧一个元素// 压缩和重编码图像,颜色值可根据实际需求调整const compressedArrayBuffer = UPNG.encode(rgba, decodedImg.width, decodedImg.height, 0);// 处理压缩后的图像// 例如,将其转换为Blob,然后URL.createObjectURL可以用于显示图片:const blob = new Blob([compressedArrayBuffer], {type: 'image/png'});const imageUrl = URL.createObjectURL(blob);console.log(imageUrl); // 用于显示或下载图片等} catch (error) {console.error("处理PNG文件时出错: ", error);}};reader.onerror = function (error) {console.error("读取文件时出错: ", error);};reader.readAsArrayBuffer(file);}

体验参考:

 简单设计EasyDesign-免费在线设计工具图片处理工具icon-default.png?t=N7T8https://jiandan.link/#/imagetools?index=0&com=ImageCompress

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/689680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lv15 input子系统框架、外设驱动开发 5

一、input子系统基本框架 在我们日常的Linux系统中,存在大量的输入设备,例如按键、鼠标、键盘、触摸屏、摇杆等,他们本身就是字符设备,linux内核将这些字符设备的共同性抽象出来,简化驱动开发建立了一个input子系统。 …

羊大师的羊奶有几种口味呢?

羊大师提供的羊奶有6种不同口味可供选择。 1.新鲜羊奶不仅没有膻味,而且富含高钙无糖,并且含有丰富的优质蛋白质和超过200种营养物质。这非常适合缺钙或体弱的人饮用。 2.益生菌羊奶是一种含有保加利亚乳杆菌、嗜酸乳杆菌、双歧杆菌等益生菌群的产品&…

基于物联网的工业企业能耗监控系统

上海安科瑞电气股份有限公司 胡冠楠 咨询家:“Acrelhgn”,了解更多产品资讯 摘要:针对工业制造企业存在高能耗、高污染的问题,提出了一种用于工业企业能耗监控的多层级网络系统。本系统可完成企业内部电力、水资源以及燃气等能源…

如何探索和可视化用于图像中物体检测的 ML 数据

近年来,人们越来越认识到深入理解机器学习数据(ML-data)的必要性。不过,鉴于检测大型数据集往往需要耗费大量人力物力,它在计算机视觉(computer vision)领域的广泛应用,尚有待进一步…

陇剑杯 2021刷题记录

题目位置:https://www.nssctf.cn/上有 陇剑杯 2021 1. 签到题题目描述分析答案小结 2. jwt问1析1答案小结 问2析2答案小结 问3析3答案 问4析4答案 问5析5答案 问6析6答案 3. webshell问1析1答案 问2析2答案 问3析3答案 1. 签到题 题目描述 此时正在进行的可能是_…

防止被恶意调用API接口

前言 在面试时,经常会被问一个问题:如何防止别人恶意刷接口? 这是一个非常有意思的问题,防范措施挺多的。今天这篇文章专门跟大家一起聊聊,希望对你会有所帮助。 1 防火墙 防火墙是网络安全中最基本的安全设备之一&…

Linux RabbitMQ 安装及卸载

一、安装 1、前景 RabbitMQ是用Erlang编写的,所以需要先安装Erlang的编译环境 注意 Erlang和RabbitMQ的版本是有一些版本匹配关系的,如果不匹配会导致RabbitMQ无法启动 2、安装Erlang # 下载 wget https://packages.erlang-solutions.com/erlang/r…

家中R4S软路由iStoreOS配置内网穿透服务实现远程访问公司电脑桌面

文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址 访问公司电脑**具体操作方法是:** 简介 软路由是PC的硬件加上路由系统来实现路由器的功能,也可以说是使用软件达成路由功能的路由器。 使用软路由控制局域网内计算机的好处&#xff1a…

【日常聊聊】深度学习进度

🍎个人博客:个人主页 🏆个人专栏:日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 方向一:深度学习的基本原理和算法 方向二:深度学习的应用实例 方向三:深度学习的挑战和未…

JVM-JVM调优基础(理论)

申明:文章内容是本人学习极客时间课程所写,作为笔记进行记录,文字和图片基本来源于课程资料,在某些地方会插入一点自己的理解,未用于商业用途,侵删。 原资料地址:课程资料 JVM参数 标准参数 …

【正点原子STM32连载】 第五十章 手写识别实验 摘自【正点原子】APM32E103最小系统板使用指南

1)实验平台:正点原子APM32E103最小系统板 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第五…

lazada、速卖通卖家如何掌握自养号测评技巧打造高评价产品?

做跨境电商卖家都知道,国外的买家购物比较理性,也喜欢货比三家,所以店铺想要留住客户,就需要一些优质的产品来吸引他们。产品评价是卖家获取买家信任的重要途径,评价越高的产品,销量也就越好。 尤其是 Shop…

机器人常用传感器分类及一般性要求

机器人传感器的分类 传感技术是先进机器人的三大要素(感知、决策和动作)之一。根据用途不同,机器人传感器可以分为两大类:用于检测机器人自身状态的内部传感器和用于检测机器人相关环境参数的外部传感器。 内部传感器 内部传感…

CrossOver 24.0 让Mac可以运行Windows程序的工具

CrossOver 24.0最新版重点添加了对 DirectX 12 支持,从而在 Mac 上更好地模拟运行 Windows 游戏,开发者在 CrossOver 23 中可以调用 DirectX 12,在模拟游戏的过程中同时调用所有 GPU 核心,从而实现更优秀的渲染效果。 目前CrossOv…

CORROSION: 1

本机 192.168.223.128目标机 192.168.223.148 主机发现 nmap -sP 192.168.223.0/24 端口扫描 ​nmap -sV -p- -A 192.168.223.148开启了22 80 端口 看web,是个apache默认界面 扫目录 gobuster dir -u http://192.168.223.148 -x html,txt,php,bak --wordlist…

推送开权引导的技术内幕

人人都讨厌代码腐化,人人都在腐化代码!本文介绍app消息推送开权提醒能力的服务端实现,并说明如何通过手搓一个简易的流程引擎来实现横向的业务场景隔离,纵向的业务流程编排,从而灵活支持业务需求,抑制代码腐…

曲线生成 | 图解B样条曲线生成原理(基本概念与节点生成算法)

目录 0 专栏介绍1 什么是B样条曲线?2 基函数的de Boor递推式3 B样条曲线基本概念图解4 节点生成公式 0 专栏介绍 🔥附C/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等)…

java以及android类加载机制

类加载机制 一、Java类加载机制 java中,每一个类或者接口,在编译后,都会生成一个.class文件。 类加载机制指的是将这些.class文件中的二进制数据读入到内存中并对数据进行校验,解析和初始化。最终,每一个类都会在方…

OpenAI:Sora视频生成模型技术报告(中文)

概述 视频生成模型作为世界模拟器 我们探索视频数据生成模型的大规模训练。具体来说,我们在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。我们利用transformer架构,在视频和图像潜在代码的时空补丁上运行。我们最大的模型Sor…

Springboot+vue的物流管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的物流管理系统(有报告)。Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的物流管理系统,采用M(model)…