位图转换为SVG的编程方法

3

如何在Android中以编程方式将位图转换为SVG?

SVG库用于Android

该库用于操作SVG文件。


1
你是怎么解决这个问题的?你找到了一个库吗? - Pedro Teran
4个回答

2
您可以使用栅格转矢量(矢量化)库,例如potraceautotrace,并将其创建为Android本地库
不幸的是,我不知道有任何完全由Java制作的这样的矢量化库,这会使得移植到Android变得更加简单。
您必须检查上述提到的库是否可以轻松适应本地Android代码(例如,它们必须交叉编译为ARM架构;您可能还会遇到依赖问题)。

2
您无法将基于光栅的图像转换为基于矢量的图像,因为底层数据完全不同。您可以在维基百科上阅读更多关于两者之间差异的信息:
http://en.wikipedia.org/wiki/Vector_graphics
http://en.wikipedia.org/wiki/Raster_graphics
两者之间的“转换”是不可能的,但有不同的算法可用于近似转换。许多用于矢量绘图的程序(例如Adobe Illustrator或Incscape)都具有自动跟踪选项,即将矢量与光栅图像配合使用以获得接近原始图像的结果。

在您的情况下,您要么必须提出自己的跟踪算法,要么必须有一个预制的SVG文件,您可以使用库进行加载。


1

看看Potrace: http://potrace.sourceforge.net/

Potrace(TM)是一款用于跟踪位图的工具,即将位图转换为平滑可缩放的图像。输入是位图(PBM、PGM、PPM或BMP格式),默认输出是封装的PostScript文件(EPS)。


通常,对于工具或库的链接,应该附带使用说明、关于链接资源如何适用于问题的具体解释以及一些示例代码。如果该工具或库不是免费使用的,请在您的答案中也提到这一点。 - Samuel Liew

0

potrace 是处理这个的工具。你可以批量处理它们,但首先必须将图像转换为单色:

ls ./p*.jpg | xargs -L1 -I {}  convert -monochrome {} {}.bmp
ls -1 ./*.bmp | xargs -L1 -I {} potrace {} -r 300 -b svg -o {}.svg

你可以创建一个简单的Web服务,将上传的任何图片进行转换。
还有一个安卓项目,它试图在安卓上运行potrace,并且你可以查看它是如何实现的,甚至使用它: https://github.com/jiangpeng79/antrace 在Ubuntu上安装:
sudo apt install potrace

光栅到矢量(矢量化)仅适用于单色图像。如果您想转换非单色的图像,Inkscape具有基于potrace的跟踪工具,支持多种颜色,它首先将图像转换为彩色层,然后跟踪这些层并合并结果。不幸的是,它还没有该功能的命令行,但您可以看看它的工作方式:

要使用跟踪器,请加载或导入图像,选择它,然后选择路径>跟踪位图项目,或Shift+Alt+B.

请参见

此处的教程!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接