如何将 PNG 图像转换为 SVG? [关闭]

Posted

技术标签:

【中文标题】如何将 PNG 图像转换为 SVG? [关闭]【英文标题】:How to convert a PNG image to a SVG? [closed] 【发布时间】:2010-12-24 02:24:16 【问题描述】:

如何将 PNG 图像转换为 SVG?

【问题讨论】:

通过一些应用程序或通过操作系统命令?如果通过操作系统,请您告诉哪个操作系统..谢谢 【参考方案1】:

你可能想看看potrace。

【讨论】:

当您知道如何使用时,此 Potrace 非常准确:但它不是多色 1.) 将您的文件转换为 BMP 2.)(对于准确的部分)将 bmp 转换为高分辨率(strech它)3.)用黑色为你想要追踪的形状着色 4.)转换 5.)将宽度和高度更改为原始 6.)欣赏准确的追踪。【参考方案2】:

png 是一种位图图像样式,而 SVG 是一种基于矢量的图形设计,它支持位图,因此它不会将图像转换为矢量,而只是嵌入基于矢量格式的图像。您可以使用免费的http://www.inkscape.org/ 来执行此操作。它会嵌入它,但它也有一个类似 Live Trace 的引擎,如果你愿意,它会尝试将它转换为路径(使用 potrace)。在 adobe illustrator(商业)中查看 live trace 就是一个例子:

http://graphicssoft.about.com/od/illustrator/ss/sflivetrace.htm

【讨论】:

我使用 Inkscape 中的实时跟踪来重新创建丢失已久的原件的徽标。除非最新版本做出了一些改进,否则它有点成问题。话虽如此,我还在 Inkscape 中手动跟踪了一些徽标,并且管理得很好。 这里解释了如何在 Inkscape 中执行此操作:wiki.inkscape.org/wiki/index.php/Potrace 很棒的评论。我们注意到 ios 7.1 Safari 不会显示嵌入 svg 的图像,而 Chrome 没有问题【参考方案3】:

我假设您希望编写软件来执行此操作。要天真地做到这一点,您只需找到线条并设置向量。为了智能地做到这一点,您尝试将形状拟合到图纸上(模型拟合)。此外,您应该尝试确定位图区域(您无法通过羞耻或应用纹理建模的区域。我不建议您走这条路线,因为这将花费大量时间并且需要一些图形和计算机视觉知识。但是,输出将比您的原始输出要好得多。

【讨论】:

【参考方案4】:

有一个网站,您可以上传您的图片,然后查看结果。

http://vectormagic.com/home

但是如果你想下载你的 svg-image,你需要注册。 (如果您注册,您将免费获得 2 张图片)

【讨论】:

【参考方案5】:

如果您在某些 Linux 系统上,imagemagick 是完美的。即

convert somefile.png somefile.svg

这适用于不同格式的堆。

用于其他媒体,如视频和音频使用 (ffmpeg) 我知道你清楚地说明了 png 到 svg,但是;它仍然与媒体有关。

ffmpeg -i somefile.mp3 somefile.ogg

如果您想浏览大量文件,这只是一个提示;使用基本 shell 技巧的循环..

for f in *.jpg; do convert $f $f%jpgpng; done

这会删除 jpg 并添加 png 来告诉转换你想要什么。

【讨论】:

Imagemagick 可在其他平台上运行,而不仅仅是“Linux”。 这在技术上是可行的,但是,生成的 svg 文件并不是真正矢量图形 - 它只包含“原样”的原始位图。因此,当您放大它时,您仍然会看到光栅图像的质量下降。 @archeyDevil 不,这不是“转换”为 SVG,而是将位图“嵌入”到空的 SVG 中。对任何人都没用。 @archeyDevil 问题标题是“convert ... to SVG”。你的答案没有转换。它嵌入。 PNG是位图格式,SVG是矢量格式。巨大的差异。嵌入是无用的,不值得一个 SO 问题恕我直言 我知道它不会转换。但是我做到了;为那些不需要矢量论文,但只需要在文件类型之间进行快速而肮脏的更改的人发布此内容。【参考方案6】:

令我惊讶的是,potrace 原来,只能处理黑白。这对您的用例可能没问题,但有些人可能会认为缺少颜色跟踪是有问题的。

就个人而言,我取得了令人满意的结果 Vector Magic

仍然不完美。

【讨论】:

【参考方案7】:

potrace 将not support PNG 作为输入文件,但PNM。 因此,首先将convert从PNG转为PNM:

convert file.png file.pnm        # PNG to PNM
potrace file.pnm -s -o file.svg  # PNM to SVG

解释选项

potrace -s => 输出文件为 SVG potrace -o file.svg => 将输出写入file.svg

示例

输入文件=2017.png

convert 2017.png 2017.pnm

临时文件 = 2017.pnm

potrace 2017.pnm -s -o 2017.svg

输出文件=2017.svg

脚本

ykarikos 提出了我改进的脚本png2svg.sh:

#!/bin/bash

File_png="$1?:Usage: $0 file.png"

if [[ ! -s "$File_png" ]]; then
  echo >&2 "The first argument ($File_png)"
  echo >&2 "must be a file having a size greater than zero"
  ( set -x ; ls -s "$File_png" )
  exit 1
fi

File="$File_png%.*"

convert "$File_png" "$File.pnm"        # PNG to PNM
potrace "$File.pnm" -s -o "$File.svg"  # PNM to SVG
rm "$File.pnm"                         # Remove PNM

单行命令

如果要转换很多文件,也可以使用如下一行命令:

( set -x ; for f_png in *.png ; do f="$f_png%.png" ; convert "$f_png" "$f.pnm" && potrace "$f.pnm" -s -o "$f.svg" ; done )

另见

参见***上的this good comparison of raster to vector converters。

【讨论】:

使用 potrace 从 pnm 转换为 svg 时,图像会失去颜色。有什么办法可以保色吗? 嗨@mundella。我一直将potrace 用于黑白图标。感谢您的反馈意见。但是很抱歉不知道如何保存颜色……嗬!我有一个想法:如果您的原始图像颜色很少(比如说三种独特的颜色),您可以创建三个初始图像(每种颜色一个)。然后转换为 SVG。最后,将三个 SVG 内容合并到一个文件中(SVG 是基于 XML 的)。希望这可以帮助...干杯;-) @olibre 有没有平台务实的做同样的事情 嗨@AmiKamboj。我不确定你的问题。命令convertpotrace 在许多平台上都可用。我正在使用基于 Linux 的计算机。我昨天刚刚使用这些命令从扫描的纸张生成 SVG。您可以看到结果:cpp-frug.github.io/images/Cpp-President-2017.svg 请详细说明您的目标。你想要/想知道什么?你的需要/愿望是什么?干杯;-) 我已经使用了几乎所有在线 x 到 svg 转换器。 potrace npm 包将它们全部从水中吹走了。太棒了。【参考方案8】:

与 adobe illustrator:

打开 Adob​​e Illustrator。单击“文件”并选择“打开”以将 .PNG 文件加载到程序中。根据需要编辑图像,然后将其保存为 .SVG 文件。单击“文件”并选择“另存为”。创建新文件名或使用现有名称。确保选择的文件类型是 SVG。选择一个目录,点击“Save”保存文件。

在线转换器 http://image.online-convert.com/convert-to-svg

我更喜欢人工智能,因为你可以做出任何需要的改变

祝你好运

【讨论】:

+1 表示 online-convert.com。现在尝试了几个单色剪影..完美无瑕..似乎也完全免费。 是的更好的转换器之一...谢谢 没想到 Illustrator 已经把它做好了。一切都已经是 .ai,这将为我节省大量时间。【参考方案9】:

根据为什么您希望将 .png 转换为 .svg,您可能不必经历这些麻烦。如果您不是很熟悉可用的工具,或者您不是专业的平面设计师,那么从 .png(光栅)转换为 .svg(矢量)可能会很痛苦。

如果有人向您发送了一个大的高分辨率文件(例如 1024x1024),您可以在 GIMP 中将其调整到几乎任何您想要的大小。如果分辨率(每英寸的像素数)太低,您通常会遇到调整图像大小的问题。要在 GIMP 中纠正此问题,您可以:

    File -> Open: 你的 .png 文件 Image -> Image Properties:检查分辨率和色彩空间。您想要大约 300 ppi 的分辨率。在大多数情况下,您希望色彩空间为 RGB。 Image -> Mode:设置为RGB Image -> Scale Image:不管大小,将 Y 分辨率设置为 300 或更大。点击比例。 Image -> Scale Image: 分辨率现在应该是 300,你现在可以将图像调整到几乎任何你想要的大小。

不像调整 .svg 文件大小那么容易,但如果您已经有一个大的高分辨率图像,那么肯定比尝试将 .png 转换为 .svg 更容易和更快。

【讨论】:

【参考方案10】:

这个工具现在运行良好。

http://www.mobilefish.com/services/image2svg/image2svg.php

【讨论】:

这会将图像嵌入到 svg 中,而不是真正的矢量图形 这转换了我的一个彩色 png,其中其他在线转换器无法正确转换。我认为它可以工作,因为我可以在浏览器中打开它,但是当我尝试在另一个工具上打开它时,它有一个错误。可能是因为上面的评论。【参考方案11】:

http://online-converting.com/image/convert-to-svg/ 非常适合转换为 svg

【讨论】:

这会从图像中删除任何颜色,与命令行上的potrace 相同的问题 - 让我想知道网站内部使用什么......【参考方案12】:

你也可以试试http://image.online-convert.com/convert-to-svg

我总是用它来满足我的需要。

【讨论】:

即使在复杂的图像中,我也确实像一个魅力。我真的建议这个工具。 很遗憾对我没用。 如果图像具有透明度,则效果不佳 你不能指望脚本给你自己拍照并得到一个完美分层的 SVG 结果,没有这样的事情。如果您有一个简单的形状并且想要获取路径,那么就可以了。我用那个页面做了很多字体图标,从来没有失败过。 @thednp 我的图像是黑白的【参考方案13】:

使用potrace 和imagemagick 的用户注意,将具有透明度的PNG 图像转换为PPM 似乎效果不佳。这是一个使用convert 上的-flatten 标志来处理此问题的示例:

sudo apt-get install potrace imagemagick
convert -flatten input.png output.ppm
potrace -s output.ppm -o output.svg
rm output.ppm

另一个有趣的现象是你可以使用PPM(256*3色,即RGB)、PGM(256色,即灰度)或PBM(2色,即只有白色或黑色) ) 作为输入格式。从我有限的观察来看,似乎在抗锯齿的图像上,PPM 和 PGM(据我所见,它们产生相同的SVGs)缩小彩色区域,PBM 扩大彩色区域(虽然只是一点点)。大概这就是pixel > (256 / 2) 测试和pixel > 0 测试之间的区别。您可以通过更改文件扩展名在三者之间切换,即。以下使用PBM:

sudo apt-get install potrace imagemagick
convert -flatten input.png output.pbm
potrace -s output.pbm -o output.svg
rm output.pbm

【讨论】:

【参考方案14】:

简单

    下载Inkscape(完全免费) 按照这篇简短的youtube video 中的说明进行操作

如您所见,如果您想做很多其他巧妙的 .svg 文件,您也可以使用 Inkscape 来完成。

非技术性观察:我个人更喜欢这种方法而不是“免费”网站产品,因为除了经常需要注册之外,通过上传图片,实际上,就是将图片提供给网站所有者。

【讨论】:

为什么投反对票?我非常成功地使用了这种方法。至少有礼貌地解释为什么人们可以从您的见解中受益。 按照这些说明仅使用 SVG XML 包装图像 - 它不会将任何内容转换为路径数据。 @Robert - 感谢您提供的信息,我非常无知,因为它对我的目的很好。然而,这并没有减损 Inkscape 能够执行完整的 PNG 到 SVG 转换的事实——等等。为了向有兴趣的人说明,我修改了我的答案,包括一个简短的解释性视频剪辑。 真的是这样吗?我检查了生成的 SVG,它似乎有路径数据,不像 mobilefish 方法...... 这是最简单的方法。应该是最佳答案。视频中解释了所有步骤。它是一个真正的 SVG,没有嵌入任何内容【参考方案15】:

我刚刚发现了这个问题和答案,因为我正在尝试做同样的事情!我不想使用提到的其他一些工具。 (不想泄露我的电子邮件,也不想付钱)。我发现 Inkscape (v0.91) 可以做得很好。这个tutorial 很容易理解。

就像在 Inkskape 中选择您的位图和 Shift+Alt+B 一样简单。

【讨论】:

以上是关于如何将 PNG 图像转换为 SVG? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将 SVG 转换为 PNG,并将应用的图像作为 svg 元素的背景

使用 PHP 将 SVG 图像转换为 PNG

如何在保留图层的同时将 SVG 转换为 PNG?

在浏览器中将 SVG 转换为图像(JPEG、PNG 等)

如何将内联 svg(在 DOM 中)绘制到画布上?

将 svg 转换为图像的库? [关闭]