底辺SE奮闘記

年収300万SEブログ

【meyfa/php-svg】Pathのラスタライズのバグについて

結論を先に書けば、

「パス中の円弧のプロパティ SweepFlagが0の場合は、meyfa/php-svgは正常に動作しない」

となります。

現象

2019/07/02現在、meyfa/php-svgのパスにはバグが存在しています。

MDNによれば、

developer.mozilla.org

下記のSVGは、

<?xml version="1.0" standalone="no"?>
<svg width="325px" height="325px" version="1.1" xmlns="http://www.w3.org/2000/svg">
  <path d="M80 80
           A 45 45, 0, 0, 0, 125 125
           L 125 80 Z" fill="green"/>
  <path d="M230 80
           A 45 45, 0, 1, 0, 275 125
           L 275 80 Z" fill="red"/>
  <path d="M80 230
           A 45 45, 0, 0, 1, 125 275
           L 125 230 Z" fill="purple"/>
  <path d="M230 230
           A 45 45, 0, 1, 1, 275 275
           L 275 230 Z" fill="blue"/>
</svg>

(MDNより引用)

通常は、下図のようになるはずです。

f:id:uma-no-kawa:20190702130213p:plain

しかし、meyfa/php-svgの下記のようなコードを実行すると、下図のようになります(低解像度は私のプログラムのせいであり、meyfa/php-svgは関係ありません)。

<?php
//中略
$svg  = '[先のSVG]';
$image = SVG::fromString($svg);
$rasterImage = $image->toRasterImage(325, 325);
//以下保存処理 略

f:id:uma-no-kawa:20190702130315p:plain

結論

これはMDNに参考にすると、

「パス中の円弧のプロパティ SweepFlagが0の場合は、meyfa/php-svgは正常に動作しない」

となるかと思います。