尺码表准备用 SVG 来生成,因为 SVG 本质上是 一个 xml 文件,方便我直接用代码来操作这个 xml 文件,在用 PHP 处理 xml 文件的时候(不用 Golang 的原因是没有找到相应的库),遇到几个问题,后来发现是自己没有仔细读官方的讨论,让我白忙活了 3 个小时。
SimpleXMLElement
xml 命名空间的问题
如果 xml 文件有声明命名空间,这个库的 xpath 就会失效,我一直以为是我的代码问题,后来读到有人反馈相同的问题,才可以在 SimpleXMLElement 中使用 xpath。
PHP: SimpleXMLElement::xpath – Manual 这个文档里面的 User Contributed Notes 写的非常清晰,命名空间的问题,无法使用 xpath。
删除节点的问题
我的需求是要能删除某 xml 的某一个节点,然后再生成 xml 文档,删除的语法比较奇怪。
xml – Remove a child with a specific attribute, in SimpleXML for PHP – Stack Overflow
unset($doc->xpath('seg[@id="A12"]')[0]->{0});
SVG 转换成 PNG
通过 PHP 把 SVG 转换成 PNG
这个要安装 imagick 扩展,大概的代码如下。
$im = new Imagick();
$svg = file_get_contents($link);
$im->setBackgroundColor(new ImagickPixel('transparent'));
$im->readImageBlob($svg);
$im->setImageFormat("png32");
$im->writeImage($path.$file.".png");
$im->clear();
$im->destroy();
Issue in svg to png – ImageMagick
image – How to convert SVG to PNG using ImageMagick in PHP? – Stack Overflow
通过命令行直接转
brew install imagemagick --with-librsvg
convert 801.svg 801.png
convert -size 800x800 801.svg 801.png