php转换图片格式为svg,php – 将SVG转换为PNG/JPEG/BMP和反之亦然?

好吧,你可能想要使用

ImageMagick或

GD功能.但请注意,您无法从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创建矢量以重复跟踪阈值化的黑/白图像以隔离元素并随后手动重建图像.这是一个艰苦的过程,但当时我没有工作,没有更好的事情要做.

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

>一个很好的源图像>付出了很多努力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 `canvas` 和 `Image` 对象将 SVG 的 Base64 编码转换PNG 的 Base64 编码,具体步骤如下: 1. 创建一个 `Image` 对象,并将 SVG 的 Base64 编码赋值给 `Image` 对象的 `src` 属性。 2. 等待 `Image` 对象加载完成后,将其绘制到一个 `canvas` 上。 3. 将 `canvas` 的内容转换PNG 的 Base64 编码。 下面是一个示例代码: ```javascript function svgToPngBase64(svgBase64) { return new Promise((resolve, reject) => { // 创建一个 Image 对象 const img = new Image(); // 加载 SVG 的 Base64 编码 img.src = `data:image/svg+xml;base64,${svgBase64}`; // 等待 Image 对象加载完成 img.onload = () => { // 创建一个 canvas const canvas = document.createElement('canvas'); canvas.width = img.width; canvas.height = img.height; // 在 canvas 上绘制 SVG const ctx = canvas.getContext('2d'); ctx.drawImage(img, 0, 0); // 将 canvas 转换PNG 的 Base64 编码 const pngBase64 = canvas.toDataURL('image/png'); // 返回 PNG 的 Base64 编码 resolve(pngBase64); }; // 加载失败时返回错误信息 img.onerror = () => { reject(new Error('Failed to load SVG')); }; }); } ``` 使用示例: ```javascript const svgBase64 = 'PHN2ZyB4bWxucz0ia...'; // SVG 的 Base64 编码 svgToPngBase64(svgBase64) .then((pngBase64) => { console.log(pngBase64); // 输出 PNG 的 Base64 编码 }) .catch((error) => { console.error(error); }); ``` 需要注意的是,由于浏览器的安全限制,转换后的 PNG Base64 编码可能无法直接使用,需要将其作为 URL 或 Data URI 内嵌到 HTML 或 CSS 中才能正常显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值