我正在开发一个网络项目,该项目涉及根据一组数据为不同州着色的美国动态生成地图。
这个 SVG 文件给了我一张很好的美国空白地图,并且很容易改变每个州的颜色。困难在于 IE 浏览器不支持 SVG,所以为了让我使用 svg 提供的便捷语法,我需要将其转换为 JPG。
理想情况下,我只想使用 GD2 库来执行此操作,但也可以使用 ImageMagick。我完全不知道如何做到这一点。
将考虑任何允许我动态更改美国地图上各州颜色的解决方案。关键是它很容易动态更改颜色并且它是跨浏览器的。请仅使用 PHP/Apache 解决方案。
原文由 Mike B 发布,翻译遵循 CC BY-SA 4.0 许可协议
你问这个很有趣,我最近刚刚为我的工作网站做了这个,我想我应该写一个教程……这是使用 ImageMagick 的 PHP/Imagick 的方法:
正则表达式颜色替换的步骤可能会有所不同,具体取决于 svg 路径 xml 以及您的 id 和颜色值的存储方式。如果您不想在服务器上存储文件,则可以将图像输出为 base 64,如
(在你使用 clear/destroy 之前)但是 ie 有问题将 PNG 作为 base64,所以你可能不得不将 base64 输出为 jpeg
你可以在这里看到我为前雇主的销售区域地图做的一个例子:
开始: https ://upload.wikimedia.org/wikipedia/commons/1/1a/Blank_USMap(states_only).svg
结束:
编辑
自从写了上面的内容以来,我提出了 2 个改进的技术:
1)而不是正则表达式循环来更改状态的填充,使用 CSS 来制作样式规则,如
然后您可以进行单个文本替换以将您的 css 规则注入到 svg 中,然后再继续进行 imagick jpeg/png 创建。如果颜色没有改变,请检查以确保您的路径标签中没有任何内联填充样式覆盖 css。
那么改变颜色就像这样简单: