【发布时间】:2011-04-30 14:56:03
【问题描述】:
PHP中的代码将SVG转换为其他图像格式和相反??
【问题讨论】:
PHP中的代码将SVG转换为其他图像格式和相反??
【问题讨论】:
好吧,您可能想要使用ImageMagick 或GD 函数。但请注意,您不能将 从 PNG/JPEG/BMP 转换为 SVG,这是一条单行道。
编辑:阐述
将 SVG(矢量)图像转换为 PNG(位图)图像很简单。 ImageMagick 可以肯定地做到这一点,我相当肯定 GD 也应该能够做到。如果没有,还有 rsvg 的 PHP 绑定。
另一方面,将 PNG(位图)转换为 SVG(矢量)是一个完整的问题。问题的核心在于,位图图像包含的信息比矢量图像要少:尤其是关于形状、线条和结构的信息被扁平化为像素糊状物,并且无法挽回地丢失。在某些情况下,这些信息可以重建,但实际上永远无法检索或重新发现。
矢量化只是一种基于位图图像创建新矢量图像的方法,让计算机尝试发现线条和形状。这个问题绝非小事,而且这个过程肯定不是完美的,在自动化环境中甚至也不可靠。
只有 Jon Skeet 可以将 PNG 转换为 SVG。
重新编辑: 自动跟踪和个人经验
前段时间,我确实在跟踪光栅图像以构建小型 Web 应用程序 (find it here, MNSFW, requires FFx/Safari/Opera) 的原型方面做了一些工作。创建矢量是使用 potrace 重复跟踪阈值黑白图像以隔离元素并随后手动重建图像来完成的。这是一个艰苦的过程,但我当时没有工作,没有更好的事情可做。
要点是:自动跟踪光栅图像以生成矢量图像充其量只是碰巧,并且可靠地获得良好的结果需要
【讨论】:
几个选项
将图像嵌入为 dataURI。虽然从技术上讲,这不是转换,但在线转换器上的一堆确实可以这样工作。
将光栅图像逐像素转换为 SVG。这不会是可扩展的,而且文件会很大,所以也不是最优的。
您与AutoTrace(通过system)进行交互,以分析您要转换的图像以获得近似值。输入格式有 BMP、TGA、PNM、PPM、PGM、PBM 以及 ImageMagick 支持的格式。导出格式为 Postscript、svg、xfig、swf、pstoedit、emf、dxf、cgm、mif、p2e 和 sk。 AutoTrace 是 FOSS。
但是,如果您选择 3,则不要期望输出看起来与之后的输入过于相似。正如其他人已经指出的那样,您将在转换过程中丢失详细信息。
【讨论】: