当前位置: 首页 > article >正文

Bun Image:无需 npm 依赖的图像处理管道,支持多格式解码与转换!

1. Bun Image 是什么Bun Image 是一个可链式调用的图像处理管道用于对 JPEG、PNG、WebP、HEIC 和 AVIF 图像进行解码、调整大小、旋转和重新编码。它基于 libjpeg - turbo、spng、libwebp 和 SIMD 几何内核构建无需 npm 依赖也无需进行原生插件构建。其 API 设计借鉴了 Sharp从输入开始构建链式调用转换操作选择输出格式然后等待终结方法执行在调用终结方法之前不会执行任何操作且处理工作会在 JavaScript 线程之外执行。2. 输入方式有哪些构造函数接受路径、字节或 Blob包括 Bun.file() 和 Bun.s3()。Blob#image() 是 new Bun.Image(blob) 的简写。图像格式通过字节进行检测扩展名和 Content - Type 会被忽略。路径字符串指的是文件系统路径不要直接将用户可控的字符串传递给构造函数应将不可信的输入读取到 Buffer 中然后传递字节。当传递 TypedArray 或 ArrayBuffer 时在终结操作未完成之前不要修改它。第二个 options 参数可防止解压缩炸弹并控制 EXIF 处理。3. 如何获取元数据在不解码像素数据的情况下可通过 await new Bun.Image(input).metadata() 读取 width、height 和 format。4. 怎样进行调整大小操作img.resize(800) 可将宽度设为 800 并保持宽高比img.resize(800, 600) 可精确为 800×600拉伸img.resize(800, 600, { fit: inside }) 可适应 800×600 区域img.resize(800, 600, { withoutEnlargement: true }) 从不放大img.resize(800, 600, { filter: mitchell }) 可选择重采样内核。fit 有 fill默认拉伸至精确的 width × height和 inside保持宽高比结果适应指定区域两种模式。filter 有多种选择默认的 lanczos3 适用于照片。当源图像为 JPEG 且目标大小最多为源大小的一半时解码会直接跳到最近的 M/8 IDCT 缩放。5. 旋转和翻转操作如何实现img.rotate(90) 可顺时针旋转 90°仅支持 90 的倍数img.flip() 可垂直镜像关于 x 轴img.flop() 可水平镜像关于 y 轴。6. 怎样进行调制img.modulate({ brightness: 1.2, saturation: 0 }) 可对图像进行调制其中 brightness 为 1 表示不变saturation 为 0 表示灰度1 表示不变1 表示增强。7. 输出格式有哪些选择调用格式方法可设置编码目标若未调用则使用源格式。如 img.jpeg({ quality: 85 })、img.png({ compressionLevel: 6 })、img.png({ palette: true, colors: 64, dither: true })、img.webp({ quality: 80 })、img.webp({ lossless: true })、img.heic({ quality: 80 })仅适用于 macOS / Windows、img.avif({ quality: 60 })仅适用于 macOS / Windows。palette: true 会将图像量化为最多 256 种颜色的调色板并输出索引颜色类型 3PNG。8. 终结操作有哪些在等待以下操作之一之前管道不会执行任何工作await img.bytes()、await img.buffer()、await img.blob()、await img.toBase64()、await img.dataurl()、await img.write(out.webp)、await img.write(Bun.s3(bucket/out.webp))。.write() 接受与 Bun.write 相同的目标如果未链式调用格式方法且目标是路径字符串则根据扩展名选择格式。9. 占位符如何使用为了在真实图像加载之前在 HTML 中嵌入低质量占位符.placeholder() 会返回一个基于 ThumbHash 渲染的最大 32 像素模糊的 data: URL大小约为 400 - 700 字节无需客户端解码器。若要对图像本身进行从粗到细的渲染可编码为渐进式 JPEG。在第一个终结操作完成后img.width 和 img.height 会反映输出尺寸之前为 - 1。10. 如何实现 Bun.serve 集成Bun Image 管道可以作为有效的 Response 主体并自动设置 Content - Type。为了在服务器处理程序中让编码操作在 JS 线程之外执行应先等待终结操作。直接传递管道new Response(img)也可以但目前在主体初始化时会同步执行编码。11. 剪贴板功能如何使用const img Bun.Image.fromClipboard() 可从 macOS 和 Windows 的系统剪贴板读取 PNG、TIFF、HEIC、JPEG、WebP、GIF 或 BMP 图像后续使用常规的解码管道进行处理。如果剪贴板中没有图像则返回 null在 Linux 上始终返回 null需要自行调用 wl - paste 或 xclip 并将字节传递给构造函数。若要实现被动的 “剪贴板中有图像按 ⌘V” 提示可轮询 clipboardChangeCount()仅在其值变化时调用 hasClipboardImage()。12. 不同平台的后端情况如何不同平台后端情况不同如在 Linux、macOS、Windows 上JPEG / PNG / WebP 都使用 libjpeg - turbo、spng、libwebpBMP / GIF解码在 Linux 是内置在 macOS 是 ImageIO在 Windows 是 WICTIFF解码在 macOS 是 ImageIO在 Windows 是 WIC在 Linux 不支持调整大小 / 旋转 / 翻转在 Linux 和 Windows 是 Highway SIMD在 macOS 是 Accelerate vImageHEIC / AVIF 在 macOS 和 Windows 部分支持在 Linux 不支持。当系统后端格式在当前机器上不可用时终结操作会抛出 error.code ERR_IMAGE_FORMAT_UNSUPPORTED 错误可根据此错误进行分支处理回退到便携式格式。由系统后端处理的格式会继承操作系统的补丁级别JPEG、PNG 和 WebP 在所有平台上使用相同的静态链接编解码器。若要强制使用便携式的 Highway 路径进行几何处理可设置全局后端Bun.Image.backend bun。

相关文章:

Bun Image:无需 npm 依赖的图像处理管道,支持多格式解码与转换!

1. Bun Image 是什么? Bun Image 是一个可链式调用的图像处理管道,用于对 JPEG、PNG、WebP、HEIC 和 AVIF 图像进行解码、调整大小、旋转和重新编码。它基于 libjpeg - turbo、spng、libwebp 和 SIMD 几何内核构建,无需 npm 依赖,…...

Zotero中文文献管理神器:茉莉花插件3分钟快速上手指南

Zotero中文文献管理神器:茉莉花插件3分钟快速上手指南 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 还在为Zotero无…...

GitHub汉化插件终极指南:3分钟打造中文开发环境,提升协作效率

GitHub汉化插件终极指南:3分钟打造中文开发环境,提升协作效率 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese …...

Applite终极指南:零门槛图形化Homebrew管理工具完全解析

Applite终极指南:零门槛图形化Homebrew管理工具完全解析 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 还在为macOS应用管理而烦恼吗?每次安装软件都要…...

AzurLaneAutoScript:碧蓝航线全自动脚本终极指南,解放双手的智能游戏管家

AzurLaneAutoScript:碧蓝航线全自动脚本终极指南,解放双手的智能游戏管家 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/Azur…...

大麦网自动抢票神器:90%成功率的一键抢票终极指南

大麦网自动抢票神器:90%成功率的一键抢票终极指南 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 当周杰伦演唱会门票在3秒内售罄,当热门演出让你一次…...

工业云脑:04 边缘计算:本地处理 vs 云端

04 边缘计算:本地处理 vs 云端 数据从传感器冒出来,像车间里刚下线的零件儿,怎么“嚼”最香?全扔云上?还是本地先咬一口?来,慢慢扒。 边缘计算的价值,不在于算得多,而在于算得近、算得快。 你想想,以前工厂数据全往云端塞,千里迢迢,延迟高、带宽贵、网一抖就卡。边…...

熬夜赶论文效率低到哭?学长安利这几个AI论文写作软件

熬夜赶论文效率低到哭?选题没思路、大纲难搭建、初稿写不顺、文献找不全、润色没方向、降重费时间、格式不规范——这些论文写作的痛点,其实都可以通过用对AI工具、走对流程来解决。资深教授普遍推荐:千笔AI(中文全流程首选&#…...

终极AI换脸指南:用roop-unleashed实现专业级人脸替换的完整教程

终极AI换脸指南:用roop-unleashed实现专业级人脸替换的完整教程 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 想要制作令人惊艳的AI换脸视频却…...

多指灵巧手技术解析与应用实践

1. 多指灵巧手技术概述 多指灵巧手作为机器人操作系统的核心执行部件,其设计理念直接决定了机器人在非结构化环境中的操作能力。这类机械手通过模拟人类手指的解剖学结构和运动方式,实现了从简单抓取到复杂精细操作的功能跨越。与传统的二指夹持器相比&a…...

终极免费色彩校准方案:用novideo_srgb解决NVIDIA显卡广色域显示器色彩过饱和问题

终极免费色彩校准方案:用novideo_srgb解决NVIDIA显卡广色域显示器色彩过饱和问题 【免费下载链接】novideo_srgb Calibrate monitors to sRGB or other color spaces on NVIDIA GPUs, based on EDID data or ICC profiles 项目地址: https://gitcode.com/gh_mirro…...

DouYinBot 抖音无水印视频解析工具:3分钟快速搭建个人解析服务

DouYinBot 抖音无水印视频解析工具:3分钟快速搭建个人解析服务 【免费下载链接】DouYinBot 该项目仅自用,不提供抖音视频下载 项目地址: https://gitcode.com/gh_mirrors/do/DouYinBot 在抖音内容创作日益普及的今天,如何快速获取无水…...

转行要趁早!网络安全行业人才缺口大,企业招聘需求正旺

网络安全行业具有人才缺口大、岗位选择多、薪资待遇好、学历要求不高等优势,对于想要转行的人员来说,是一个非常不错的选择。 人才缺口大 网络安全攻防技术手段日新月异,特别是现在人工智能技术飞速发展,网络安全形势复杂严峻&am…...

Kubernetes容器运行时对比分析:选择最适合你的容器运行时

Kubernetes容器运行时对比分析:选择最适合你的容器运行时 一、容器运行时概述 容器运行时(Container Runtime) 是Kubernetes集群中负责运行容器的底层软件。它负责从镜像仓库拉取镜像、创建和管理容器进程、提供隔离环境等核心功能。 1.1 …...

基于多保真度机器学习与飞秒激光的光子表面逆向设计实践

1. 项目概述与核心价值在光子学和先进制造领域,我们常常面临一个核心挑战:如何根据一个理想的光学性能目标,比如特定的光谱吸收或发射曲线,反向找到能够实现这一目标的精确物理结构或制造工艺参数。这就是逆向设计的魅力所在。传统…...

Kubernetes服务发现与负载均衡机制:构建高效的服务通信网络

Kubernetes服务发现与负载均衡机制:构建高效的服务通信网络 一、服务发现概述 服务发现是微服务架构中服务之间相互定位和通信的核心机制。在Kubernetes中,服务发现通过Service资源实现,它为一组Pod提供稳定的网络标识和负载均衡能力。 1.…...

如何彻底解决QQ音乐加密格式的播放限制?

如何彻底解决QQ音乐加密格式的播放限制? 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 还在为下载的QQ音乐文件无法在其他设备上播放而烦恼吗?你是…...

哔哩下载姬完整使用指南:免费高效管理B站视频的终极方案

哔哩下载姬完整使用指南:免费高效管理B站视频的终极方案 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&…...

2026年5款AI封面生成工具对比实测,短视频矩阵如何批量产出高点击率封面?

日更30条视频后,封面成了最耗人力的瓶颈一位做知识类矩阵账号的运营同学最近在 CSDN 社区发帖:‘每天剪完40条口播视频,还要手动调色、加标题、选字体、抠图、对齐网格——光是封面就卡住整条流水线。’这不是个例。在抖音、小红书、B站三端同…...

3步完成SQLite到MySQL数据库迁移:智能转换工具实战指南

3步完成SQLite到MySQL数据库迁移:智能转换工具实战指南 【免费下载链接】sqlite-to-mysql Script to convert and add sqlite3 database into a mysql/mariadb database 项目地址: https://gitcode.com/gh_mirrors/sq/sqlite-to-mysql 在开发项目从原型到生产…...

SMUDebugTool:免费开源的AMD Ryzen硬件调试利器,释放处理器全部潜力

SMUDebugTool:免费开源的AMD Ryzen硬件调试利器,释放处理器全部潜力 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table…...

NCMDump工具:3步轻松解密网易云音乐NCM加密文件

NCMDump工具:3步轻松解密网易云音乐NCM加密文件 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经在网易云音乐下载了喜欢的歌曲,却发现只能在官方客户端播放?NCM加密格式的限制让你无法在…...

SketchUp STL插件终极指南:3步实现3D打印模型无缝转换

SketchUp STL插件终极指南:3步实现3D打印模型无缝转换 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl 你是否曾经…...

图像做 DCT:揭秘那个让像素“开口说话“的数学魔法

一、一个让我"开窍"的乐谱解读故事 我有一个学钢琴的表妹,从小就有一种让我惊叹的能力——她听任何一段陌生的旋律,都能立刻在钢琴上准确弹出来。我一直觉得她有"绝对音感"这种天赋。有一次我好奇地问她:“你怎么做到的&…...

YCbCr 转 RGB:揭秘那串神奇公式背后的百年故事

一、一个让我"开窍"的翻译故事 我大学时有个学语言学的朋友,他给我讲过一个让我至今难忘的故事。他说翻译界有一个著名的"中间语言"问题——如果你要把一本书从 50 种语言互相翻译,最笨的办法是给每两种语言之间都准备一个翻译&…...

光栅图像的核心特性:揭秘那个“放大就糊“的视觉之谜

一、一个让我"开窍"的乐高积木故事 我有个朋友是乐高玩家,他给我讲过一个让我至今难忘的故事。他说他用乐高拼了一幅蒙娜丽莎的画像——用几千块标准乐高颗粒,按特定的颜色和位置摆放,远远看去真的有蒙娜丽莎那神秘微笑的轮廓。 他…...

DCT 变换:揭秘那个让一张图片“瘦身“百倍的数学魔法

一、一个让我"开窍"的乐队演奏故事 我有个学音乐的朋友,他给我讲过一个让我至今难忘的故事。他说有一次他听一支交响乐团演奏贝多芬的《第五交响曲》,指挥家在排练时做了一个特别有趣的"游戏"——他让乐团分别只演奏不同乐器组的声音…...

色度下采样:揭秘那个让 4K 视频“飞“起来的隐形魔法

一、一个让我"开窍"的报纸印刷故事 我大学时学过一段时间平面设计,去一家报社实习,亲眼见识过报纸印刷的全过程。报社的印刷流程让我印象特别深刻——他们印彩色版面时,黑色文字部分的网点密度极高(每英寸 150 线以上&a…...

JMeter性能测试实战:从接口验证到分布式压测全链路

1. 这不是“点点点就能跑通”的工具,而是你接口质量的守门人很多人第一次打开 JMeter,以为它就是个“高级版 Postman”——填 URL、选方法、点执行,看到绿色小对勾就以为测试完成了。我带过三届测试团队,每届都有至少两个新人在压…...

Thorium浏览器:面向企业级部署的技术选型与架构决策指南

Thorium浏览器:面向企业级部署的技术选型与架构决策指南 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are towards the top of t…...