【问题标题】:Conversion of SVG into PNG/JPEG/BMP and Vice Versa?将 SVG 转换为 PNG/JPEG/BMP 和反之亦然?
【发布时间】:2011-04-30 14:56:03
【问题描述】:

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

【问题讨论】:

    标签: php image svg


    【解决方案1】:

    好吧,您可能想要使用ImageMagickGD 函数。但请注意,您不能将 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 重复跟踪阈值黑白图像以隔离元素并随后手动重建图像来完成的。这是一个艰苦的过程,但我当时没有工作,没有更好的事情可做。

    要点是:自动跟踪光栅图像以生成矢量图像充其量只是碰巧,并且可靠地获得良好的结果需要

    1. 不错的源图片
    2. 很多努力

    【讨论】:

    • 嗯,没有办法吗?从任何图像转换为 SVG 地图??
    • @PhpSeeker:详细说明了我的答案。
    • @gpvos 是的,很好,您可以将光栅图像存储在 SVG 中。但当然,此时浮现在脑海中的问题是“为什么?”......
    • 但是您可以对 PNG 进行其他操作,例如旋转、缩放和倾斜。
    • inkscape 用于跟踪光栅图像的引擎称为 potrace,在 PHP 中访问应该相当简单,因为它是一个命令行应用程序:potrace.sourceforge.net
    【解决方案2】:

    几个选项

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

    2. 将光栅图像逐像素转换为 SVG。这不会是可扩展的,而且文件会很大,所以也不是最优的。

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

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

    【讨论】:

    • 1:那为什么要使用 SVG? 2:不,不会。它不会比光栅文件更具可扩展性。事实上,如果有的话,它将是较少可扩展的,因为它阻止了通常会发生的插值,使得该方法在可以想象的每一种方式中完全没有意义。
    • @Will 1. 那不是问题,2. 你说得对。我更正了那部分。我还添加了另一种可能的方法,因此请考虑立即删除您的 DV。
    • 我对 2 的观点成立,但鉴于 3,我撤销了 DV。
    • 非常感谢您的支持...!!
    • @Will 谢谢,我同意 1 和 2 是不可行的,但是,这是可能的。 @phpseeker,不客气。
    猜你喜欢
    • 2019-10-17
    • 2011-09-09
    • 1970-01-01
    • 2016-04-05
    • 2010-12-03
    • 2011-10-08
    • 2013-03-15
    • 2019-09-19
    • 2013-12-29
    相关资源
    最近更新 更多