将SVG转换为PNG / JPEG / BMP和反之亦然?

时间:2010-10-26 08:08:06

标签: php image svg

PHP中的代码将SVG转换为其他图像格式并且相反?

2 个答案:

答案 0 :(得分:5)

好吧,您可能想要使用ImageMagickGD功能。但请注意,您无法将 PNG / JPEG / BMP 转换为 SVG,这是一条单行道。

编辑:精化

将SVG(矢量)图像转换为PNG(位图)图像非常简单。 ImageMagick可以做到这一点,我相当肯定GD应该也能做到。如果没有,还有rsvg的PHP绑定。

另一方面,将PNG(位图)转换为SVG(向量)是一个完整的问题。该问题的核心是位图图像非常简单地包含比矢量图像更少的信息:特别是关于形状,线条和结构的信息被平铺到像素goop并且不可挽回地丢失。在某些情况下,可以重建此信息,但从未实际检索或重新发现。

矢量化仅仅是一种基于位图图像创建新矢量图像的方法,计算机尝试发现线条和形状。这个问题远非微不足道,在自动化设置中,这个过程肯定不完美,甚至不可靠。

只有Jon Skeet可以将PNG转换为SVG。

Reedit: 自动跟踪和个人体验

回过头来,我确实做了一些关于跟踪栅格图像的工作,用于构建一个小型web应用程序(find it here, MNSFW, requires FFx/Safari/Opera)的原型。使用potrace重复跟踪阈值化的黑/白图像以隔离元素并随后手动重建图像来完成矢量的创建。这是一个艰苦的过程,但我当时没有工作,没有更好的事情要做。

要点是:自动跟踪光栅图像以产生矢量图像充其量是命中注定,并且可靠地获得良好的结果需要

  1. 一个好的源图像
  2. 付出了很多努力

答案 1 :(得分:2)

几个选项

  1. 将图像嵌入为dataURI。从技术上讲,这不是转换,但是在线转换器上的一堆确实可以这样工作。

  2. 逐个像素地将栅格图像转换为SVG。这不可扩展,文件大小也很大,所以它也不是最优的。

  3. 您与AutoTrace(通过system)进行交互,以分析您要转换的图片以获得近似值。输入格式是BMP,TGA,PNM,PPM,PGM,PBM以及ImageMagick支持的格式。 Exportformats是Postscript,svg,xfig,swf,pstoedit,emf,dxf,cgm,mif,p2e和sk。 AutoTrace是FOSS。

  4. 但是,如果你选择3,不要期望输出看起来太像输入之后的那样。与其他人已经指出的一样,您将在转换过程中丢失详细信息。