位图到SVG以编程方式转换

时间:2012-01-02 12:34:30

标签: android bitmap svg

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

SVG Library for android

该库用于操作SVG文件。

4 个答案:

答案 0 :(得分:2)

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

在您的情况下,您将需要提出自己的跟踪算法,或者使用库加载预先制作的svg文件。

答案 1 :(得分:1)

您可以使用栅格到矢量矢量化)库,例如 potrace {{ 3}} ,并从中创建一个Android autotrace

不幸的是,我不知道任何这样的矢量化库是用Java制作的,这会使Android的端口变得更简单。

你必须检查我上面提到的库是否可以轻松适应到本机android代码(例如,他们必须交叉编译到ARM体系结构;你也可能有依赖性问题)

答案 2 :(得分:0)

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

  

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

答案 3 :(得分:0)

declare function local:parse-xpath($xpath as xs:string) as xs:string { fn:normalize-space( fn:replace( fn:replace( fn:replace( fn:replace( fn:replace( fn:replace( fn:replace( fn:replace( fn:replace( $xpath, '\[not\(\*\)\]', ' with no child elements ' ), 'not\(\*\)', ' there are no child elements ' ), '\*', ' any element ' ), '\.', ' this element ' ), '@', ' attribute ' ), '\]\[', ' and ' ), '\[', ' where ' ), '\]', ' ' ), '//', ' any depth where ' ) ) }; 是此工具。您可以批量处理它们,但首先必须将图像转换为单色:

potrace

您可以使用简单的网络服务转换上传的任何图片。

还有一个Android项目试图在android上运行potrace,你可以看到它是如何做到的,甚至可以使用它: https://github.com/jiangpeng79/antrace

在Ubuntu上安装:

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

光栅到矢量(矢量化)仅适用于单色图像。如果要转换非单色图像,sudo apt install potrace 有一个支持多种颜色的potrace示踪工具,它首先将图像转换为颜色图层然后跟踪它们并合并结果。不幸的是,它还没有该功能的命令行,但你可以看到它是如何工作的:

  

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

Tutorial here!