PNG转WebP转换器

浏览器本地把 PNG 转成有损 WebP:质量参数 0.10 到 1.00 共 19 档可调,可选缩放,透明通道保留,实测输出体积,图片不离开你的设备。

还没有选择图片。没有现成 PNG 的话,点「载入示例图片」会用 Canvas 现画一张 800×600 的示例图走完整流程。

质量档位对照(相对 q=0.75 的体积倍数为经验值,实际以你的图为准)
质量 q对应 libwebp -q相对 0.75 档体积典型用途
0.10100.33×带宽敏感的缩略图
0.25250.45×列表预览图
0.40400.56×论坛与社区配图
0.50500.65×一般网页配图
0.60600.78×博客正文图
0.70700.92×通用网页图
0.75751.00×(基准)libwebp 默认档
0.80801.09×本页默认:质量与体积平衡点
0.85851.20×摄影作品展示
0.90901.35×高质量存档
0.95951.58×近无损要求
1.001002.10×仍是有损最高档,不等于无损
输入尺寸与解码位图内存对照(RGBA 每像素 4 字节;默认显示 12 行)
宽 × 高像素数RGBA 位图超 4000 万上限
800 × 600480,0001.8 MB否
1024 × 768786,4323.0 MB否
1200 × 800960,0003.7 MB否
1920 × 10802,073,6007.9 MB否
2560 × 14403,686,40014.1 MB否
3840 × 21608,294,40031.6 MB否
4000 × 300012,000,00045.8 MB否
5000 × 400020,000,00076.3 MB否
6000 × 400024,000,00091.6 MB否
8000 × 600048,000,000183.1 MB是(拒绝)
12000 × 9000108,000,000412.0 MB是(拒绝)
16384 × 16384268,435,4561.00 GB是(拒绝)

使用方法

  1. 点「选择图片」挑一张 PNG(只接受 image/png 类型)。选了 JPG 或 WebP 会被拦下并提示去对应工具页。
  2. 拖「质量参数」滑杆,0.10 到 1.00 共 19 档,默认 0.80(对应 libwebp 的 -q 80);标签上实时显示当前档位。
  3. 「缩放百分比」填 25 到 100(步长 5),默认 100 表示保持原尺寸;填 50 时 1200×800 的图按 600×400 编码,像素量降到四分之一。
  4. 点「转换为 WebP」;结果区给出原图字节、WebP 字节、节省百分比(可能为负,如实显示)与输出尺寸,预览图同步刷新。
  5. 点「下载 WebP」保存,文件名沿用原名只换 .webp 扩展名。没有现成图片时点「载入示例图片」,Canvas 会现画一张 800×600 示例图走完整流程。

这个PNG转WebP转换器能解决什么

网站配图要压体积又想保住透明背景:PNG 的 DEFLATE 压缩对照片类内容效率很低,而 WebP 的有损模式基于 VP8 视频关键帧技术,照片类内容通常能显著缩小。本页一次转换就在本地完成,原图不离开浏览器。

调质量档不用反复猜:很多在线工具只给「高中低」三档,本页 19 档滑杆直接对应 libwebp 的 -q 值,转换后立刻报实测字节数,想找体积与画质平衡点时来回拖两下就有答案。

需要顺带缩图时不用再开一个工具:缩放与降质量两项收益相乘,50% 缩放直接把像素量砍到四分之一,比单独降质量档杠杆大得多。

本页不做的事:不输出无损 WebP(canvas.toBlob 没有对应参数,见原理一节);不做批量队列与打包下载,多格式互转请用图片格式转换;不做压缩率优先的通用压缩(PNG、JPG 混合场景请用图片压缩);只接受 PNG 输入,JPG 源请用JPG转WebP转换器。

原理与规则说明

PNG转WebP转换器的核心调用是 canvas.toBlob(callback, 'image/webp', q):第二个参数固定 MIME 类型,第三个参数 q 取 0 到 1 的浮点数。在 Chromium 内核里它线性映射到 libwebp 编码器的 -q 0~100(q × 100),libwebp 手册的默认值是 75;规范没有定义省略 q 时的默认值,交给浏览器自定,所以本页把滑杆显式化,不依赖隐式默认。

这条路只能拿到有损 WebP。有损 WebP 的图像数据是 VP8 关键帧(RFC 6386),无损模式(VP8L)由命令行工具的 -lossless 开关启用,toBlob 没有对应参数——所以 q = 1 也只是有损最高档,体积约为 0.75 档的 2.1 倍,画质提升肉眼几乎不可见。这就是本页默认 0.80 而不是 1.00 的原因:网页二次编码的观感损失通常比原始素材大,多花一倍体积换不来可见收益。

透明通道是安全的:WebP 的 alpha 不走 VP8 有损路径,而是单独编码成 VP8L 平面或 ALPH 块,质量参数默认只作用于亮度与色度。PNG 的透明背景转过去后仍是透明背景;但完全透明区域里的 RGB 颜色值默认会被丢弃,半透明边缘可能有轻微色偏,对 UI 截图与线稿通常无感。

解码有双层兜底:先试 createImageBitmap(file, { imageOrientation: 'none' }),在主线程之外解码且按文件存储方向取图;不可用或抛错时回退 new Image() 加 URL.createObjectURL,两条路都失败才报错,并区分「文件不是图片」与「解码失败」两种文案。支持探测不看浏览器版本号,直接看 toBlob 回调里 blob.type 是否等于 image/webp——不支持的浏览器(如 Safari 14 及更早)会不报错地静默输出 PNG,本页检测到降级会明确告知「实际得到的是 PNG」。

转换链路:选文件 → 校验类型与体积(先查像素数、再查字节数)→ 解码得位图 → 按缩放比例画到画布 → toBlob('image/webp', q) → 读 blob.size 与 blob.type → 展示实测体积并生成下载。缩放比例作用于编码前,25% 以下的小图没有编码意义,所以下限定在 25%。

完整示例(数值仅作演示)

点「载入示例图片」后走一遍默认参数(q = 0.80、不缩放):800×600 的示例 PNG 约 480,000 像素、RGBA 位图 1.8 MB,转换后结果区直接报实测 WebP 字节数与节省百分比——这个数字由你的浏览器现算,每台设备一致,因为编码器是同一套 libwebp。

档位对照:一张对 0.75 档出 64 KB 的图,0.40 档约 0.56 倍即 36 KB,0.95 档约 1.58 倍即 101 KB。倍数是经验曲线,只用于解释取舍形状;你的实测值以结果区为准,本页不用估算值冒充实测。

缩放示例:1200×800(960,000 像素)缩到 50% 变成 600×400(240,000 像素),WebP 体积大致降到四分之一;再叠加从 0.80 降到 0.60 档,还能再省约三成。两项收益相乘,这就是「先缩后压」比「只压」高效的原因。

负压缩示例:纯色线稿或已是 WebP 的图再转一次,结果可能比原图更大。结果区会如实显示「−X%(反而变大)」,不隐藏、不截断为 0。

输入范围与对照表

输入范围:仅 image/png 类型;文件体积上限 20 MB(20,971,520 字节);像素数上限 40,000,000(RGBA 位图约 152.6 MB);质量参数 0.10~1.00 步长 0.05 共 19 档;缩放 25~100 步长 5。上表的尺寸内存对照展示了两条边界落在哪:8000×6000(48,000,000 像素)起就会被拒绝。

质量档位的完整阶梯见工具区第一张表:0.10 档体积是基准的三分之一,适合带宽敏感的缩略图;0.75 是 libwebp 默认;0.80 起体积反超基准;1.00 档体积翻倍但仍是有损。CSV 导出两张表都带 BOM 头,Excel 打开中文列名不乱码。

常见输入与选择建议:UI 截图与线稿选 0.60~0.75(大块纯色对量化不敏感);照片选 0.75~0.85;需要反复编辑的母版请保留 PNG 原件——有损 WebP 每存一次就多一代损失,不适合当工作文件。

输入范围、边界与精度说明

为什么像素上限定在 40,000,000:Chromium 单张画布约 228 = 268,435,456 像素封顶,iOS Safari 更低;16000×16000 的图理论内存就要 1 GB,页面会先崩。4000 万像素约 152.6 MB 位图,是多数设备的安全线。校验顺序是先像素数、后字节数——体积小但像素多的高压缩 PNG 同样危险,只查字节数会漏掉它。

每条非法路径都有独立文案:未选图就点转换提示「还没有选择图片」;选了 JPG 提示「请选择 PNG 图片」并指明该用哪一页;超过 20 MB 提示先压缩;解码失败会附上浏览器的原始报错;缩放填 10 或 150 提示允许 25 到 100;toBlob 返回 null 时说明浏览器不支持该 MIME,提示更换浏览器而不是静默失败。

输出体积读的是 blob.size,是编码器真实写出的字节数,不是估算值;节省百分比 = (1 − WebP 字节 / PNG 字节) × 100,保留 1 位小数,为负时原样显示。同一张图同一档位重复转换结果可能有 ±1 字节级别抖动,属编码器正常行为。

常见误用一:把 q = 1 当无损。它是有损 VP8 的最高档,需要真无损请用命令行 cwebp 的 -lossless。误用二:拿有损 WebP 反复转存(WebP→PNG→WebP),每代有损编码都会累积损失。误用三:用 text/html 思路猜测格式行为——格式判定只认 blob.type,不认文件扩展名。

常见问题

为什么本页给不出无损 WebP?

canvas.toBlob 的参数里没有无损开关:有损走 VP8,无损走 VP8L,后者只有 cwebp 命令行的 -lossless 能启用。这是接口限制,不是实现偷懒;q=1 也只是有损最高档。

质量参数选多少合适?

截图与线稿 0.60~0.75,照片 0.75~0.85,对体积极敏感的缩略图可以到 0.25。拿不准就从默认 0.80 往下拖,盯结果区的实测字节,找到体积跳增的拐点。

转完为什么有时反而更大?

三类情况:纯色线稿上 VP8 的块预测不如 PNG 的 DEFLATE;q 拉到 1.0 体积约为基准 2.1 倍;输入本身已经是 WebP 之类的高压缩格式,再编码只会变大。结果区会如实显示负节省。

透明背景会丢吗?

不会。WebP 的 alpha 走独立的无损平面(VP8L 平面或 ALPH 块),不受质量参数影响。只有完全透明区域里的颜色值会被丢弃,半透明边缘可能有轻微色偏。

Safari 上能用吗?

Safari 16 起支持 WebP 编码;更早版本会静默输出 PNG。本页不看版本号,直接检查 blob.type,降级发生时结果区会明确告知实际得到的是 PNG。

为什么超过 4000 万像素的图被拒绝?

解码后的 RGBA 位图每像素 4 字节,4000 万像素约 152.6 MB;Chromium 画布上限 2 的 28 次方像素,iOS 更低。超限转换大概率崩标签页,提前拦截比事后崩溃好。

手机拍的照片方向会转错吗?

PNG 不带 EXIF,不存在方向标记问题;本页解码时显式传 imageOrientation: 'none',即使误选了带 Orientation 的文件也按存储方向解码,不自动旋转。

图片会被上传到服务器吗?

不会。解码、缩放、编码全部在浏览器本地完成,没有任何网络请求;导出用的是本地 Blob 链接,刷新页面后即失效。

相关工具

PNG转WebP转换器只负责「PNG 进、有损 WebP 出」这一条路,同族工具各管一段。