图片转 SVG

全球通用工具

SVG 文件可以承载一张图片,这个页面做的正是这件事:一个真正的 SVG 文档、一个文件,里面是你的图片和由你声明的尺寸——给网页用就用像素,给打印用就用毫米。这是一件正当的工作,往往也是把单张图片送进“只收矢量文件”的版面的唯一办法。

将多个文件拖拽到此处,或 。

全部在你的浏览器里处理——不会上传任何内容。

    最多 20 张图片,单张最大 25 MB。每张各自写出一个 SVG 文件,都在这个浏览器标签页里完成——绝不上传。

    保留原始字节是无损的,而且文件最小;重新编码成 PNG 或 JPEG 能让它在每个 SVG 阅读器里都能打开。

    里面的图片永远是同样的像素;这个设置决定文件声明自己有多大,也就是页面、幻灯片或打印机读取的数值。

    只在选图片前用于下面的计划。真实任务使用文件本身。

    边输入边更新。所有计算都在你的浏览器里完成,数据不会离开本机。

    3 张图片的 SVG 封装方案

    SVG 内嵌原始字节

    每张图片各自变成一个内嵌图片的 SVG 文件,声明尺寸取图片自身的像素尺寸。不上传任何东西,也不会丢掉什么——除非你自己要求。

    每份图片数
    最多 20 张
    SVG 里面
    文件自己的字节
    打开尺寸
    按自身像素
    矢量图形
    不是——见下文

    添加图片之后会发生什么

    1. 每张图片都从你的设备读出并解码,这样 SVG 才能声明一个它真能担保的像素尺寸。
    2. 文件被原样复制进 SVG——不重新编码,所以一点内容都没损失。代价是兼容性:打开这个 SVG 的程序必须认得原来的格式,而 JPEG 和 PNG 是每个 SVG 读取者都认得的两种。
    3. 图片以 base64 编进 SVG,所以这种文件大约比里面的图片大三分之一:每两个字节的图像,要用三个字符的文字来装。
    4. 每个 SVG 单独下载,名字沿用原来的文件:photo.jpg 变成 photo.svg。
    这不是矢量艺术,这话得说直白些:装了图片的 SVG 只是个容器,里面的图仍然是固定的像素网格,放大看到的还是原来那些像素,和 JPEG 一模一样。把像素变成形状叫描摹,它只在平涂绘画上才做得好,而描摹一张照片是成千上万条路径、文件还大得多——所以这个页面不做描摹。

    SVG 里可以装什么

    SVG 里面适合代价
    图片自己的字节把一切都按原样留住,而且 SVG 最小文件被原样复制进 SVG——不重新编码,所以一点内容都没损失。代价是兼容性:打开这个 SVG 的程序必须认得原来的格式,而 JPEG 和 PNG 是每个 SVG 读取者都认得的两种。
    PNG任何 SVG 读取者都能打开,透明精确保留像素写成 PNG,每个 SVG 读取者都认得,而且精确保留透明。同一张照片以 PNG 装进 SVG,体积是 JPEG 版的数倍。
    JPEG图片是照片时,SVG 最小像素按你选的质量写成 JPEG:三者里最小的 SVG,也是唯一装不下透明的那个。

    SVG 里装的东西,打开它的程序必须认得:装在 SVG 里的 BMP 或 AVIF 并不是每个编辑器都读,而 JPEG 和 PNG 都读。

    这种文件最适合把一张图片放进只收矢量文件的版面——标签、幻灯片、切割机的上传口、必须保持单文件的文档。如果你要的是一张“因为被重画过、所以多大都清晰”的图,那是另一件事:把平涂原稿交给描摹工具,或者直接要原始矢量稿。

    诚实答案的另一半是:这个文件不是什么。它不是矢量艺术:里面的图片仍是一格格像素,放大就看到和 JPEG 里一样的像素。把像素变成图形叫描摹(tracing),那是另一件事,只在平面图形上效果好;本页面在下载任何东西之前就说明这一点,而不是事后解释。

    关于这个工具

    矢量艺术是多数人对“图片转 SVG”的期待,也正是这个页面拒绝假冒的唯一点。它写出一个真正的、自包含的 SVG 文档,里面是你的图片,尺寸由你声明:网页用像素,打印用毫米——这常常是把一张图片送进“必须矢量文件”的版面的唯一办法。

    生成这个文件不上传任何文件:图片被 base64 编码进 data URL,以文本形式写在 SVG 里,封装过程在你的浏览器里完成,所以一份未发布的 Logo 或签名扫描件始终留在你的设备上。容器可以任意缩放而不失真,但里面的像素不会因此增加细节。

    描摹和封装是两件事:把像素变成图形在平面图形上效果好,用在照片上会变成成千上万条细小路径和一个大得多的文件,所以这个页面做封装,并直说这一点,不假装自己矢量化了任何东西。按阅读它的程序挑载体:原始字节、PNG 或 JPEG。要真正的矢量,请用专门的描摹工具。

    它是怎么工作的

    装着图片的 SVG 到底是什么

    SVG 文档是文本文件,装图片的元素是 `<image>`。它不指向别处的文件,而指向一个 `data:` URL——你的图片,base64 编码后以文本写进文档里。这就是文件能自包含的原因:发给别人时图片跟着一起走,没有文件夹、没有失效链接、没有坏缩略图。

    两个属性决定几何关系,各司其职。`viewBox` 是图片自己的像素网格——“这张图是 4000 × 3000 个单位”;`width`、`height` 是这个文件声明自己有多大。声明成 210 mm 而 viewBox 说 4000 像素并不矛盾:这正是矢量容器的意义,两者之间的比例就是图片自身的比例,所以任何情况下都不会被拉伸。

    文件能在所有浏览器、Illustrator、Inkscape、Affinity、Word、PowerPoint,以及那些要求 SVG 的上传系统里打开——因为它是一个有效的 SVG 文档,而不是仿制品。它对打开它的程序只有一个要求:看懂里面装的是什么格式。JPEG 和 PNG 是通用的,而 SVG 里装 BMP 或 AVIF 就不是每个编辑器都读得懂。这正是本页面可以在导入时把图片重新编码成 PNG 或 JPEG 的全部原因。

    矢量容器里的像素:什么依然清晰,什么不会

    容器可以任意缩放而不损失任何东西,这本身就值得拥有。一张 600 像素的 PNG 以 5 cm 放进幻灯片,通常会被排版程序重采样,因而稍微变软;同一个 PNG 放进 SVG,则是正好 600 像素映射到 5 cm,一像素不动。透明度保留,颜色值就是文件里的值,除非你要求,否则没有重新编码。

    不会发生的是细节增加。把 SVG 放大到足够近,你看到的是里面那张图的像素,因为那里就是像素——一张写进文本的固定网格。这类 SVG 在“文件声明的大小”上清晰,而且在任何尺寸下都是同一张图。把这叫做“矢量艺术”是撒谎,而正是这个谎让人以为图片转 SVG 能救活一个小 Logo。

    所以诚实的用例是那些“一个自包含文件、尺寸受控”就够的场景:打印模板里的标签、必须保持单文件的幻灯片配图、规格书上的 Logo、只接受 SVG 的上传系统、不能依赖一整个图片文件夹的文档。至于要在全屏观看的照片,普通 JPEG 更小也一样好。

    描摹,以及为什么这个页面不做描摹

    把像素变成图形有个名字:描摹(tracing,也叫矢量化)。常见做法是把图片压到少量颜色、找出每个色块的轮廓、简化轮廓,然后写成 `<path>` 元素。用在平面图形上(Logo、图标、图表、扫描签名、只有几种颜色的地图)效果确实比原始位图更好,因为它真的变成了图形。

    用在照片上则会产生成千上万条极小路径、一个比 JPEG 大很多倍的文件,以及一张像被复印机折磨过的海报。这不是描摹器的 bug;这是你让一张照片用轮廓描述自己时必然发生的事。

    因此本工具做的是封装而不是描摹,并说明你需要哪一种。如果你有平面图形、想要真正的矢量,专门的描摹器才是对的工具——Inkscape 的 “Trace Bitmap” 免费且恰好擅长这件事——这里不会假装做过它。

    原始字节、PNG 或 JPEG:三种载体

    保留图片到达时的样子是最小、最诚实的选择:字节原样进去,不重新编码,唯一代价是打开 SVG 的程序必须懂图片原来的格式。PNG 是安全的通用载体,保留透明度但文件更大;JPEG 是小载体,不能保留透明度,且会按你选的质量损失一点。

    选择在表单上,计划尺寸会在你运行任何东西之前先打印出来。这些都不改变图片:每种情况下 viewBox 都保留原始像素网格,所以声明的尺寸和里面的数据永远不会互相矛盾。

    示例

    示例使用页面自带的默认输入,只改设置;下面的结果与你在页面上看到的完全一致。

    一张原样保留的照片

    SVG 携带什么: 图片自己的字节,原样不动(无损,最小)

    3 张图片的 SVG 封装方案

    SVG 内嵌原始字节

    每张图片各自变成一个内嵌图片的 SVG 文件,声明尺寸取图片自身的像素尺寸。不上传任何东西,也不会丢掉什么——除非你自己要求。

    每份图片数: 最多 20 张 · SVG 里面: 文件自己的字节 · 打开尺寸: 按自身像素 · 矢量图形: 不是——见下文

    保留原始字节时,SVG 里的图片就是你上传的文件,字节级一致——没有重新编码、没有第二代损失,也是三条路线里最小的 SVG。代价同样明确:打开这个 SVG 的程序必须懂图片到达时的那个格式。

    一张透明背景的 Logo,用于幻灯片

    SVG 携带什么: 在里面重新编码为 PNG(像素无损,到处都能打开) · SVG 打开时有多大: 网页友好:像素,无单位(浏览器默认假设的)

    3 张图片的 SVG 封装方案

    SVG 内嵌 PNG

    每张图片各自变成一个内嵌图片的 SVG 文件,声明尺寸取图片自身的像素尺寸。不上传任何东西,也不会丢掉什么——除非你自己要求。

    每份图片数: 最多 20 张 · SVG 里面: PNG · 打开尺寸: 按自身像素 · 矢量图形: 不是——见下文

    PNG 每个 SVG 阅读器都懂,并且能精确保留透明度,所以它是 Logo 的安全载体。文件会比同一张 Logo 的 JPEG 版本更大,而且里面仍然是 Logo 自己的像素:透明度被保留,超出这些像素的清晰度不会被创造出来。

    一张 100 mm 宽的打印标签图片

    SVG 携带什么: 在里面重新编码为 JPEG(最小,不支持透明度) · SVG 里的 JPEG 质量: 高(85%)——适合打印 · SVG 打开时有多大: 打印:毫米 · 宽度: 100

    3 张图片的 SVG 封装方案

    SVG 内嵌 JPEG

    每张图片各自变成一个内嵌图片的 SVG 文件,声明尺寸取100 毫米。不上传任何东西,也不会丢掉什么——除非你自己要求。

    每份图片数: 最多 20 张 · SVG 里面: JPEG · 打开尺寸: 100 毫米 · 矢量图形: 不是——见下文

    用毫米声明尺寸,是告诉打印程序该把它放多大,高度按图片自身的形状推算——宽 100 mm 就得到保持宽高比的相应高度。JPEG 让文件保持小,但无法保留透明度。

    同一张图片,一个不用猜的尺寸

    SVG 打开时有多大: 打印:英寸 · 宽度: 4

    3 张图片的 SVG 封装方案

    SVG 内嵌原始字节

    每张图片各自变成一个内嵌图片的 SVG 文件,声明尺寸取4 英寸。不上传任何东西,也不会丢掉什么——除非你自己要求。

    每份图片数: 最多 20 张 · SVG 里面: 文件自己的字节 · 打开尺寸: 4 英寸 · 矢量图形: 不是——见下文

    宽四英寸,高度随图片走。里面的 viewBox 仍然是像素网格,所以文件对自己装的是什么、有多大都不含糊——正是排版程序需要的东西。

    常见问题

    这个 SVG 是真的 SVG,还是改了后缀的图片?

    它是一个真正的 SVG 文档:合法的 XML,一个带 viewBox、`<title>`、描述和 `<image>` 元素的 `<svg>` 根——任何 SVG 阅读器都懂的结构。它不是由 `<path>` 组成的图形。如果某个服务说它需要“真正的矢量”文件,通常指的是可以无损改色和任意缩放的图形;放在 `<image>` 元素里的图片不是那种东西,这个页面也不会自称是。

    我把 SVG 放大时,里面的图片还会清晰吗?

    文件能完美缩放,因为容器是几何;里面的图片不会增加细节,因为没有更多细节可加。一张 600 像素的 Logo 声明成 20 cm,就是 600 像素摊在 20 cm 上——比同一个 Logo 放在 5 cm 上更糊。如果你需要任何尺寸都清晰的锐度,源必须是图形而不是像素:去找原始设计稿,或把平面图形描摹成路径。

    为什么 SVG 比我放进去的图片还大?

    因为 base64:图片被写成文本,而文本每八个字符只携带六个位的数据,所以负载大约涨三分之一(每三个字节用四个字符,正好)。外壳再加几百字节。因此保留原始字节是最小的选项:1 MB 的 JPEG 大约变成 1.37 MB 的 SVG,而过程中没有任何东西被重新编码。

    这样会损失画质吗?

    用“图片自己的字节”不可能损失任何东西:文件原样复制进去。用 PNG 载体也没有损失,因为 PNG 是无损格式——像素完全相同,文件通常更大。只有 JPEG 载体是有损的,而且损失程度就等于你选择的质量档。

    图片进了 SVG 之后我还能编辑它吗?

    可以移动、缩放、旋转和替换它——它就是一个 `<image>` 元素,每个编辑器都把它当作置入的图片。你无法在 SVG 编辑器里编辑它的像素,也无法给它的一部分改色,因为它是图片而不是图形。Inkscape 的 “Trace Bitmap” 之后可以把它变成路径,前提是这张图足够平面化;照片上做不到。

    我应该声明多大的尺寸?

    如果文件要上网,就保留它自己的像素尺寸:像素网格和声明尺寸一致,CSS 想怎么缩放都行。如果要进印刷或文档,就用毫米、厘米或英寸声明宽度——210 mm 是 A4 的宽度,100 mm 是常见的标签宽度——高度会按图片自身的形状算出来。两种方向都不会被拉伸,因为里面的 viewBox 保留了原始比例。

    SVG 里应该装哪种格式?

    照片用 JPEG:到处都懂,而且小。Logo、截图和任何带透明度的东西用 PNG。如果文件本来就是 JPEG 或 PNG,而你想要“绝对没有重新编码”的保证,就用图片自己的字节——它无损且最小,唯一的代价是打开 SVG 的程序必须懂原始格式。

    动图 GIF、PDF 或 TIFF 呢?

    动图 GIF 可以被装进 SVG,浏览器通常会继续播放动画,但打印和排版程序只显示第一帧——所以它可行,只是值得知道它在哪里不可行。PDF 和 TIFF 会被拒绝:它们是文档而不是网页图片,放进 `<image>` 元素里没有合理的含义。SVG 输入同样被拒绝,因为那正是本工具写出的格式。

    资料来源与统计口径

    • SVG 用一个 image 元素装你的图片,同时写出 SVG 1.1 与 SVG 2 两种链接属性,让文件在更多地方都能打开。
    • 这里不做描摹:图片是被嵌入的,不会被转换成矢量路径,所以照片会得到一个更大的文件,边缘也不会变成曲线。
    • 图片不上传:读取与写出 SVG 都在你的浏览器里本地完成。

    最近复核于 2026-09-16.

    本页在您的浏览器本地运行,请保留原文件备份;不涉及财务建议。 阅读完整免责声明。