图片格式转换
把图片拖进左边的框,或点一下选文件;右边挑目标格式,要缩放就调比例或最长边。整条链路都在本地 canvas 上跑,图片不会上传到任何服务器,换完设置会自动重转一次。下面三节写的是这件事的代价 —— 它们都不会报错,所以得先说清楚。
—
重编码一定有代价
PNG 之间互转是无损的,体积、像素都不会变。但只要目标里有 JPEG,就是有损的:编码器会丢掉它认为不重要的细节,而且每存一次就丢一次 —— 把一张 JPEG 转成 PNG 再转回 JPEG,画质会比原来更差。所以这一页只做一次转换,不替你在内部反复编码。
元数据会丢
canvas 重新画出来的图不带任何元数据:EXIF 里那个旋转标记、拍摄时间、GPS 坐标、色彩配置文件、ICC、动画帧 —— 全部没了。这一页把这一点明确写出来,因为"导出的图方向突然反了"和"颜色和原图不一样"这两件事,根源都在这里。
缩放是不可逆的
缩小之后再放大回原尺寸,得到的是一张模糊的图,不是原来那张。这一页不保存原图,也不提供"撤销" —— 转换完请另存一份,别拿结果覆盖原文件。
常见问题
不支持,浏览器本身就不支持。 桌面 Chrome、Edge、Firefox 都解不了 HEIC/HEIF,而这一页用的正是浏览器自带的解码器。iPhone 可以在「设置 → 相机 → 格式」里改成"兼容性最佳"(存成 JPEG),或者用系统自带的导出功能转一次。
因为你的浏览器不会编码 WebP。canvas.toBlob 在遇到不支持的目标格式时会静默退回 PNG,不抛错、不打警告。这一页会读回实际产物的 MIME 类型,对不上就明说 —— 而不是给你一个后缀写着 webp、内容却是 PNG 的文件。
不会。 解码、缩放、编码全部由浏览器本地完成,没有一次网络请求。断网也能用。
因为 PNG 是无损的,而 JPEG 是有损压缩。一张照片压成 JPEG 可能只有 300KB,而它解出来的像素用 PNG 存可能要 5MB —— 这不是转换失败,是无损格式本来就要这么多字节。要小就选 WebP 或 JPEG。
