php - 如何将大型 SVG 文件转换为平铺的 PNG?

标签 php linux svg imagemagick rsvg

我有一个很大的 SVG 文件(大约 60 MB,10000x10000 像素,但有可能变得更大),我想从中创建许多平铺的 256x256 PNG 图像(在那个例子中会有为 1600 张图片;round(10000/256)^2).

有没有人知道如何在 Web 服务器上执行此操作(除其他外还运行 PHP)?我考虑过 rsvg,但它似乎没有任何修改边界框的功能(我宁愿避免为每个部分手动执行此操作)。 ImageMagick 或许能够做到这一点,但我一直没有足够的运气让它发挥作用。使用 rsvg 创建一个大的 PNG,然后使用专用于平铺非常大的图像的工具可能会起作用,但我没有找到这样的东西!速度并不是真正的问题,尽管它是可取的,所以如果最坏的情况发生,我可能会考虑修改每个部分的 SVG 边界框。不过,我可以看到这一代人永远消失了!

有人知道有什么方法可以做到这一点吗?

编辑 2016-03-02:

我最近回来再次需要这个问题的答案,Inkscape 似乎是唯一可以为给定区域以给定大小渲染 SVG 的工具(svgexport 几乎满足这些要求,但它不允许你改变纵横比)。

我的目标是将 SVG 平铺成 256x256 的平铺,现在我已经成功地制作了一个脚本,它可以通过在 inkscape 中重复渲染大约 16,000 x 16,000 和平铺来平铺任意大的 SVG结果图像。我已经成功渲染了尺寸超过 500,000 x 500,000 像素的 SVG——内存使用没有问题(只是需要很长时间!)

最佳答案

inkscape具有导出 png 的命令行模式,采用可选参数来选择要导出的区域

inkscape vector.svg --export-png=raster.png --export-area=0:0:100:100

关于php - 如何将大型 SVG 文件转换为平铺的 PNG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3121921/

相关文章:

javascript - 如何仅在需要时处理 ajax 请求,而不是每次都处理

linux - 将 .txt 文件中的内容作为 bash 脚本的参数传递?

css - SVG 进度条以圆的 75 刻度为虚线

javascript - 为什么这个矩形不宽

php - 使用两个键对数组进行排序,如果一个键的两个值相同则使用另一个键?

php - 如何限定 Eloquent 关系的范围(或执行传统连接)

php - 如何将日期格式 d/m/Y 更改为 Y-m-d PHP

linux - 一行获取进程的PID

java - 执行 GC 时,在安全点应用程序线程暂停期间导致 vmop 时间增加的原因

animation - 我可以将动画 SVG 渲染到 Canvas 吗?