SVG 转 PNG 工具

在浏览器里把 SVG 转成 PNG、JPEG 或 WebP:按倍数或像素设尺寸,保留透明背景,多个文件打包 ZIP。自动补全缺失的 xmlns,外部图片与字体问题逐条提示,文件不上传。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
1 倍时按 SVG 根元素上写的尺寸输出;只有 viewBox 时按 viewBox 尺寸,两者都没有时为 300 × 150。倍数可填任何大于 0 的数。「宽度」「高度」填 1 到 65,535 的整数像素,另一边按宽高比计算。「宽 × 高」同时指定两边,比例与 SVG 不同时图形按其 preserveAspectRatio 放置。单边最大 65,535 px,同时受浏览器 canvas 上限约束。
选 JPEG 或 WebP 时出现「质量」,填 1 到 100 的整数,留空或超出范围时按 92。JPEG 不支持透明,背景为「透明」时透明区域填成白色。浏览器不能编码所选格式时,按浏览器实际给出的格式保存,并在预览下方提示。
「透明」在 PNG 和 WebP 中保留 SVG 的透明区域。「白色」「指定颜色」先铺底色,再在上面绘制 SVG。JPEG 选「透明」时底色为白色。背景透明且结果不超过 4,194,304 像素时会检查图像,完全透明就给出提示。
把 .svg 文件拖到工具区任意位置,或点击上方的框选择。多个文件按同一设置转换,不是 SVG 的文件会被跳过并列出。也可以在这里输入或粘贴 SVG 代码,再点「转换」或按 Ctrl/⌘+Enter。在文本框之外按 Ctrl/⌘+V,剪贴板里的 SVG 代码或 SVG 文件会直接转换。压缩的 .svgz 文件无法读取。
结果 显示像素尺寸、文件大小、预览和下载按钮。文件名沿用 SVG 的名字:倍数不是 1 时加 @2x 这样的后缀,其他尺寸模式加「-宽x高」,粘贴的代码保存为 image。预览下方的提示列出补上了什么、哪些引用没有加载。多个文件时,点文件表里的名字查看该文件,每一行可单独下载,「全部下载(.zip)」保存为 svg-to-png.zip。

放入 SVG,或粘贴代码后点「转换」,这里显示图像尺寸、预览和下载按钮。

示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

输出尺寸怎么定

1 倍时按 SVG 根元素声明的尺寸输出,单位按 CSS 绝对长度换算(1in = 96px,1mm = 96/25.4px):width=“50mm” height=“25mm” 得到 189×94;只写 width=“200” 加 viewBox=“0 0 24 12” 时,高度按 viewBox 比例算成 100;只有 viewBox 时用 viewBox 的宽高;width=“100%” 这类百分比取决于所在页面,改用 viewBox。三者都没有时是 300×150。

绘制前,工具把目标尺寸写进 SVG 的 width、height,缺 viewBox 时补上,浏览器因此按最终分辨率重新渲染矢量,不会把小图拉伸放大。「宽 × 高」与原图比例不同时,图形按 SVG 的 preserveAspectRatio 放置(默认居中),其余部分是背景。

实测:公众号文章配图

微信公众平台「上传发表内容中的图片」接口写明:图片仅支持 jpg/png 格式,大小必须在 1MB 以下。用 draw.io、Figma 画好的 SVG 流程图要先转成位图。下面是 2026-09-30 在 Chrome 152(macOS)里的实测,文件是一张 viewBox=“0 0 1200 520”、三个方框加中文字的流程图:

设置输出大小
1 倍,PNG1200×52030,816 字节
2 倍,PNG2400×104081,569 字节
2 倍,JPEG,质量 902400×104046,177 字节

三种都在 1MB 以内。图里的中文用本机字体渲染(这台机器是苹方);如果 SVG 用 @import 引了网络字体,工具会在预览下方提示字体没有加载。

从网页复制出来的 SVG

SVG 直接写在 HTML 里时不需要 xmlns,所以从开发者工具或 React 组件里复制出来的代码常常没有它。这样的代码单独保存后,浏览器无法把它当成图像打开。实测一段 <svg viewBox=“0 0 1024 1024” width=“200” height=“200”> 开头的图标代码:工具补上 xmlns=“http://www.w3.org/2000/svg” 后输出 200×200、3,675 字节的 PNG,并在预览下方注明已补全。

另一种常见错误是文字里夹着 &nbsp;。它是 HTML 实体,XML 里没有定义,工具会报「第 N 行第 M 列」并建议改成 &#160;。属性引号没闭合、结束标签写错这类语法错误,也会给出行列和中文原因。

转换前想先压缩 SVG,可以用 SVG 压缩优化;要生成整套网站图标(ICO、apple-touch-icon)用 Favicon 生成器;要把 PNG 内嵌进 CSS 或 HTML,用图片转 Base64。

与同类工具对比

2026-09-30 用同一组文件在桌面版 Chrome 实测。「只写宽度」指 width=“200” viewBox=“0 0 24 12”,1 倍应为 200×100。

工具只写宽度width=“100%” + 200×100 的 viewBox外部 <image>
gallery.selfboot.cn24×12100×100,图形被压扁PNG 里画出一个图片加载失败图标
svgtopng.com(默认 2 倍)400×24,被压扁400×200静默丢弃
本工具200×100200×100去掉链接并列出网址

selfboot 对缺 xmlns 的文件提示「请检查 SVG 是否引用了跨域图片、远程字体或浏览器不支持的内容」,没有指出真正原因;svgtopng.com 对含 <foreignObject> 的文件输出一张全透明 PNG,也不报错。两者都在浏览器本地转换,svgtopng.com 一次最多 20 个文件。

限制

  • 渲染用的是浏览器自己的 SVG 引擎,Chrome、Firefox、Safari 的输出在文字抗锯齿和滤镜上可能略有差别。
  • 文字用本机字体,换一台电脑转换,字体可能不同;要固定字体,把字体以 data: URI 写进 @font-face。
  • 含 <foreignObject> 的 SVG 在 Chrome(实测 152 版)和同内核的 Edge 里无法导出。
  • 带 SMIL 动画的 SVG 只保存第一帧。
  • 浏览器不能从 canvas 编码 WebP 时会改为输出 PNG,工具按实际格式保存并提示。
  • 不支持 .svgz(gzip 压缩的 SVG),请先解压。

命令行批量转换

文件多或要放进构建流程时,可以用 Node.js 库 sharp,它用 librsvg 渲染 SVG。用 sharp 0.34.5(librsvg 2.61.2)对一个只有 viewBox 的 24 × 24 图标实测:

import sharp from 'sharp'; // npm install sharp

await sharp('icon.svg').resize(512, 512).png().toFile('icon-512.png');   // 512 × 512
await sharp('icon.svg', { density: 288 }).png().toFile('icon@4x.png');   // 4 × the SVG size

不写 resize 或 density 时,PNG 就是 SVG 自身的尺寸(这里是 24 × 24)。默认密度为 72,所以 density: 288 得到 96 × 96。librsvg 和浏览器是不同的渲染器,依赖网页字体或 CSS @import 的文字可能显示不同,整批转换前先拿一个文件和本页的结果对比。

FAQ

为什么 24×24 的图标转出来这么小?

只有 viewBox、没有 width/height 的 SVG 没有自己的像素尺寸,1 倍就按 viewBox 输出:viewBox="0 0 24 24" 得到 24×24 像素。选 4 倍,或把「尺寸」改成「宽度」并填入需要的像素数即可。工具会按目标尺寸重新渲染矢量图,边缘不会发虚。

能保留透明背景吗?

PNG 和 WebP 在背景选「透明」时会保留。JPEG 没有透明通道,按 HTML 标准 canvas 导出这类格式时透明处会变黑,所以工具改为填充白色并提示。需要其他底色时在「背景」里指定颜色。

SVG 里的图片或网络字体为什么没有出现在 PNG 里?

浏览器把 SVG 当作图像绘制,这种模式下不会加载文件以外的任何资源:外部 <image> 链接、引用其他文件的 <use>、CSS @import 与网络字体都不会加载。工具会在预览下方逐条列出这些引用。需要保留时,把图片和字体改成 data: URI 内嵌;否则文字会用本机已安装的字体。

文件会上传到服务器吗?

不会。文件在当前浏览器标签页里读取、绘制并生成 PNG。SVG 按图像方式绘制,其中的脚本和事件属性不会执行。页面加载完成后断开网络,工具照样能用。

最大能输出多大?

单边最多 65,535 像素,同时受浏览器 canvas 上限约束:桌面版 Chrome 为 268,435,456 像素(16,384×16,384),iPhone 与 iPad 为 4,096×4,096。超过上限时工具会报错,不会保存一张空白图。