SVG 转 PNG

选好你要的尺寸,拿到一张清晰的 PNG。免费、不用注册、不加水印,文件全程留在你的浏览器里。

  • 100% 在浏览器内
  • 不上传、免注册
  • 保留透明度
  • 批量 + ZIP

矢量图没有固定的像素尺寸 —— 你在这里选的尺寸,决定了 PNG 有多清晰。 为什么?

为什么要把 SVG 转成 PNG

SVG 是更好的格式 —— 一直到某个地方不肯收它为止。邮件客户端会把它剥掉。多数社交平台既不接受它当头像,也不接受它当预览图。大量上传表单、印刷服务、电商后台和老一点的软件只认像素。演示文稿和文档嵌入它时行为难以预料。这些都不是 SVG 的缺陷 —— 它只是没有被普遍支持,而 PNG 有。

所以转换的常见理由是兼容性,而不是偏好。你把 SVG 留作母版,每当下游需要时导出一张 PNG,用那个场景要求的尺寸。

第二个理由是把外观固定下来。SVG 是用观看者手上的字体和渲染引擎画出来的,所以在不同机器上可能有细微差别。PNG 到哪里都一样,因为每个决定都已经做完了。

而且和反方向不同,这个方向很直接。从 PNG 到 SVG 意味着去猜那些从来不在文件里的形状;从 SVG 到 PNG 只是画出来,而浏览器本来就擅长画 —— 唯一真正要决定的是画多大。

要上传的工具他们的服务器?这个工具你的设备什么都不离开你的设备,没有副本需要删除。
别的转换器把你的文件上传到服务器。这个就在文件已经所在的地方画它。

为什么「不丢质量」问错了问题

SVG 没有属于自己的像素尺寸。转换时根本没有什么需要「保住」—— 只有你选的那个尺寸,而一切都取决于这个选择。

这是围绕这个转换搜得最多的问题之一,而这个想法的出处很合理:JPEG 每存一次都要付出一点代价,所以自然会以为每次转换也是。矢量不是这么回事。

SVG 是一组指令 —— 在这里画个圆,把这条路径填成那个颜色。它没有分辨率。导出 PNG 时,浏览器按你要的尺寸执行这些指令,重新画一遍。你要 4000 像素,它就按 4000 像素画。没有任何东西被降采样或重新压缩,因为一开始就没有像素数据。

我们量过这条规律能撑到哪里。拿一张 100 像素的源图往上渲染:1000 像素时导出约 20 毫秒,4000 像素约四分之一秒,8000 像素约一秒,16000 像素约五秒、四兆半。每一档都是干净的重绘,不是放大。再往上浏览器画布就放弃了,所以这个工具把最长边限制在 16000。

所以如果导出的 PNG 看着发虚或有锯齿,原因几乎从来不是转换器有损,而是导出时的像素数配不上它最终出现的位置 —— 一张 64 像素的 PNG 放进幻灯片里占 400 像素宽,不管哪个工具生成的都会难看。

这把整件事重新定了框。问题不是「怎么避免丢质量」,而是「这里需要多少像素」。网站图标要 512。社交预览图要 1200 × 630。要送印的 logo 要印厂给的那个数。知道这个数字之后,转换本身就是小事一桩 —— 所以它是这个页面最靠前的东西,而不是藏在菜单里的一个选项。

矢量 4×位图 4×
矢量图会按你要的尺寸重新画一遍,位图只能被拉大。

怎么把 SVG 转成 PNG

四步,全部在这个浏览器标签页里完成。全程没有任何东西被上传。

1

把 SVG 拖进来

一个文件或者一批。我们在本地读取每一个并看一眼:它的尺寸、有没有引用网络上的东西、以及它到底能不能导出。

2

核对源尺寸

我们会显示从文件里读到的尺寸,以及它是从哪儿来的:是 width 和 height 属性,还是 viewBox。这件事比看上去重要,下一节会解释为什么。

3

选输出尺寸

用倍数、输入精确像素,或者直接取一个预设 —— 网站图标 512,社交配图 1200 × 630,应用图标 1024。想保持比例就锁上宽高比。背景可选透明或白色。

4

转换并下载

每个文件都按你要的尺寸画出来交给你。一批文件打包成 ZIP。全程没有上传,所以服务器上没有副本,也不用排队。

要反过来? 如果你手上是 PNG 想得到矢量图,那是个难得多的问题,值得先读一读 —— 我们的 PNG 转 SVG 页面讲清楚了它能做什么、不能做什么.

这个转换器能做什么

它在你的浏览器里把 SVG 按你指定的精确尺寸转成 PNG,而且不问你要任何回报。没有账号,不要邮箱,没有每日额度,不加水印,也不用排队。

尺寸是主控件,不是藏起来的设置。倍数、带宽高比锁的精确像素、以及针对真实需求的预设。这个搜索词下排在前面的工具里有两个**完全没有**尺寸选项 —— 它们给你什么就是什么。

它会告诉你默认值从哪来。从你文件里读到的尺寸会连同来源一起显示,因为 SVG 文件在「怎么声明自己的尺寸」这件事上并不统一,而浏览器给的答案不总是你想要的那个。

它在转换之前检查文件,而不是之后。SVG 在浏览器里可能出三种问题,三种都能提前查出来:导不出去的 HTML 内容、从网上加载因而不会被画出来的字体或图片、以及会让文件完全加载不了的命名空间声明缺失。前两种会解释给你听,第三种直接修好。

批量转换是内置的,没有值得一提的上限。多个文件一次、一套尺寸设置、最后一个 ZIP。

默认保留透明,也有白色背景选项,给那些需要实底的地方用。

大家拿它来做:

  • 按规定像素尺寸做网站图标和应用图标
  • 社交预览图 —— 那必须是位图
  • 邮件签名和邮件通讯,那里 SVG 会被剥掉
  • 只收 PNG 的电商后台和印刷上传
  • 嵌入 SVG 行为难以预料的演示文稿和文档
  • 要求到处看起来都一样的截图和文档配图
  • 为高像素密度屏幕导出 2× 和 3× 的图标

什么设备上都能用

它在浏览器里运行,所以没什么要安装的,各个平台之间也没有差别。

§ 01

Windows

Chrome、Edge 和 Firefox 都能用。不用装什么,事后也不留东西。

§ 02

Mac

Safari、Chrome 和 Firefox 都能用。PNG 会像别的文件一样落到「下载」里。

§ 03

iPhone 和 iPad

从「文件」里选一个 SVG,再把 PNG 存回「文件」。不用装 App。

§ 04

Android

从任何文件管理器都能用。转换跑在你的设备上,不在服务器上。

§ 05

Linux

Firefox 和 Chromium 都能用 —— 手边没装 ImageMagick 的时候很方便。

§ 06

Chromebook

在浏览器里本地运行 —— 反正在 Chromebook 上,本来也只有那里能跑东西。

SVG 可能在哪些地方出问题

转换本身是可靠的,不可靠的是 SVG 文件 —— 它们的写法差异极大。下面这四种情况是我们对每个拖进来的文件都会检查的,结论来自把真实文件送进真实浏览器测出来的结果。

width + height100 × 100只有 viewBox150 × 150两者都没有300 × 150我们用 viewBox,而不是浏览器那个 150 × 150。
三种写 SVG 的方式,三个不同的默认尺寸 —— 其中两个是和图本身毫无关系的 CSS 默认值。
情况会发生什么这个工具怎么做
文件写明了 width 和 height就用它们,必要时从 cm、mm、pt 或英寸换算采用并说明
只有 viewBox,没有 width 和 height浏览器报 150 × 150 —— 一个 CSS 默认值,和图本身无关改用 viewBox,那才是作者的本意
两者都没有浏览器报 300 × 150,而且不会把内容缩放进去回退到 300 × 150,并说明文件没给尺寸
从网上加载的字体或图片永远不会被取回 —— 文字会悄悄变成另一种字体检测出来并在转换前提醒
foreignObject 里的 HTML画布被污染,浏览器拒绝导出检测出来、解释清楚,并建议用 Inkscape
缺少 xmlns 声明文件根本加载不了自动补上并继续
TitleTitle网络字体字体会变<foreignObject>内含 HTML无法导出
真正会出问题的两件事,都会在你按下转换之前检测出来。

唯一一件浏览器里谁都解决不了的事

如果一个 SVG 含有 foreignObject —— 也就是嵌在矢量里的一段 HTML —— 浏览器会在它被画出来的那一刻把画布标记为「已污染」,此后不再允许任何人把像素读回来。这是关于跨源内容的安全规则,不是 bug,也不是转换器能绕开的东西。任何跑在浏览器标签页里的工具都会撞上同一堵墙;那些看起来做得到的,是把活儿放在服务器上干的。画图工具是这类文件的常见来源:Mermaid 和 draw.io 都会为文字块生成 foreignObject。如果你手上是这种文件,Inkscape 这类桌面程序导出起来毫无怨言。我们在你按下任何按钮之前就检查这一项,因为事后才发现更糟。

怎么判断你导出的尺寸够不够

打开这张 PNG,按 100% 查看,然后和它实际会出现的大小比一比 —— 它所在那栏的宽度、印出来的尺寸、平台要求的像素数。如果 PNG 比它要去的地方小,看起来就会发虚,而这一点任何转换器的任何设置都改变不了。换个更大的数字重新导出就行。对屏幕来说,一个好习惯是按你需要尺寸的两倍导出,因为高密度屏幕每个 CSS 像素要画两个物理像素。

你的 SVG 留在浏览器里

转换发生在你自己的设备上。你的文件在本地读取,在这个标签页里画到画布上,再直接交还给你。它从不上传,所以服务器上没有副本,也没有什么保留期限需要你操心。

这里值得说准一点:在浏览器里转换并不是这个页面独有的。目前在这个搜索词下排第一的站点同样是完全在客户端运行的,而且它也这么写了。我们提这件事是因为它属实,也因为它是选择一个工具的理由 —— 不是因为它让我们与众不同。

有一个细节确实是实打实的:SVG 里的脚本不会执行。浏览器通过图片元素绘制 SVG 时,既不执行任何脚本,也不去取任何外部资源 —— 这两点我们都验证过。所以一个来源不太确定的文件,在这里除了被画出来之外做不了别的事。

§ 01

不上传

文件在你的设备上转换。

§ 02

不要账号

不用注册,不要邮箱,没有每日额度。

§ 03

不加水印

PNG 是你的,干干净净。

§ 04

脚本不执行

SVG 里嵌的任何东西都是惰性的。

常见问题

把 SVG 转成 PNG 会丢质量吗?
不会,而且这个问题值得拆开说,因为它一直有人问。SVG 没有自己的分辨率 —— 它是一组绘图指令。导出成 PNG 是按你要的尺寸执行这些指令,所以没有任何东西被压缩或降采样。如果你的 PNG 看着发虚,那是导出时的像素数配不上它最终出现的位置。换个更大的尺寸重新导出,就会清晰。
我该按多大导出?
按目的地要求的尺寸。网站图标要 512 像素,社交预览图要 1200 × 630,应用图标要 1024。对于出现在屏幕上、尺寸由你决定的东西,按你需要的两倍导出 —— 高密度屏幕每个 CSS 像素要画两个物理像素,2× 导出正是让边缘在这些屏幕上保持利落的办法。要印刷的话,问负责印的人;他们会给你一个像素数,或者一个 DPI 加一个实际尺寸。
为什么我的 PNG 看起来模糊?
几乎总是因为导出的尺寸小于它被显示的空间。一张 64 像素的 PNG 放进幻灯片里占 400 像素宽,是被演示软件拉大了,这一点任何转换器的任何设置都救不了。按它实际会显示的尺寸导出,或者更大。另一个可能的原因是高像素密度的屏幕,那其实是同一个问题换了个样子 —— 解法也一样:导出得更大些。
为什么文字的字体变了?
因为这个 SVG 引用了托管在网上的字体,而浏览器在绘制 SVG 时不会去取任何外部资源。这是一条刻意设置的安全边界,不是这个工具的局限 —— 每个在浏览器里跑的转换器都一样。文字会悄悄回退到默认字体。想避免的话,把字体内嵌进 SVG,或者在设计软件里先把文字转成轮廓再导出。我们会检测这一点并在转换前提醒你。
为什么我的 SVG 转不了?
两个原因几乎能解释全部情况。文件里可能含有 foreignObject —— 嵌在矢量里的一段 HTML,浏览器出于安全拒绝导出。Mermaid、draw.io 这类画图工具会产出这种文件,用 Inkscape 这样的桌面程序导出则完全没问题。或者 XML 本身有错,那样浏览器连加载都做不到。第三个原因是缺少 xmlns 声明,这个我们直接自动修好,而不是拒绝文件。
默认用的是什么尺寸?
文件里写明的那个,而且我们会告诉你它来自文件的哪一部分。如果 SVG 有 width 和 height 属性,我们就用它们,必要时从 cm、mm、pt 或英寸换算。如果只有 viewBox,我们就用 viewBox —— 这是有意为之,因为浏览器对这种文件会报 150 × 150,而那是一个和图本身毫无关系的 CSS 默认值。如果文件完全没写尺寸,我们回退到 300 × 150,并把这件事说出来。
透明会保留吗?
会,默认就保留。PNG 支持透明,你的 SVG 里没有画到的地方就保持透明。如果你需要实底背景 —— 有些上传表单和印刷流程要求 —— 有一个白色背景选项。
能一次转多个文件吗?
能。想拖多少就拖多少,尺寸只设一次,最后打包成 ZIP 回来。倍数是按每个文件各自的源尺寸算的,所以一批大小不同的图标会各自翻倍,而不是被强行拉到同一个尺寸。如果你想让它们尺寸完全一致,就输入一个精确尺寸。
有尺寸上限吗?
最长边 16000 像素。这不是随便定的数,而是浏览器画布停止工作的地方。我们量过:16000 × 16000 能在大约五秒内产出一张 4.5 MB 的有效 PNG,而 20000 会彻底失败。你要求更大时,尺寸会被缩到能用的范围,并且会告诉你。
我需要上传文件吗?
不需要。文件在你自己的设备上、在这个浏览器标签页里读取和转换。什么都不会被送到别处,所以什么都不会被存下来,也没有保留期限。
能把 PNG 转回 SVG 吗?
能,但那是难得多的活儿,动手之前值得先弄明白。从像素到矢量意味着去描摹那些从来不在文件里的形状 —— 对 logo 和线稿效果很好,对照片则很差。我们的 PNG 转 SVG 页面量化了它对每一类图片的实际效果。
SVG 到底是什么?
一个描述形状的文本文件 —— 线条、曲线、填充 —— 而不是一格格像素。因为它存的是指令而不是点,所以可以画成任意大小而永远不会出现马赛克,而且对 logo、图标这类纯色平面图来说,通常比位图小得多。你可以用文本编辑器打开它、读懂它。代价是并非所有地方都接受这个格式 —— 这也正是这个页面存在的理由。

按正确的尺寸转换你的 SVG

选一个尺寸,拿到清晰的 PNG。免费、支持批量,而且绝不会离开你的浏览器。

把 SVG 转成 PNG