PHP経由でSVGをPNGファイルに変換しようとしています。これを行う唯一の合理的な方法はImageMagickを使用することであるという事実に私は辞任しました。
私は Windows 7 で xampp セットアップの開発作業を行っており、本番環境は Linux 環境になります。次の PHP コードは、ファイル変換に成功しています。
$svg_file_name = "image.svg";
$png_file_name = "image.png";
system("convert -background none $svg_file_name $png_file_name");
ただし、本番サーバーでは、セキュリティ上の理由から「system()」メソッドへのアクセスが無効になっています。次のコード (わずかに変更されていますが、最初はここで提案されていました) は 4 行目で失敗します。
<?
$image = new Imagick();
$contents = file_get_contents('image.svg');
$image->readImageBlob($contents);
$image->setImageFormat("png24");
$image->resizeImage(400, 225, imagick::FILTER_LANCZOS, 1);
$image->writeImage('image.png');
エラーで:
Fatal error: Uncaught exception 'ImagickException' with message 'no decode delegate for this image format `' @ error/blob.c/BlobToImage/358' in C:\Web\xampp\htdocs\sitename.com\editor\image.php:4 Stack trace: #0 C:\Web\xampp\htdocs\sitename.com\editor\image.php(4): Imagick->readimageblob('<svg width="640...') #1 {main} thrown in C:\Web\xampp\htdocs\sitename.com\editor\image.php on line 4
上記のコードは、.jpg ファイルが入力として使用される場合に機能します。
SVG ファイルの内容は次のとおりです。
<svg width="640" height="480" xmlns="http://www.w3.org/2000/svg">
<g>
<circle id="svg_1" r="72.73239" cy="89" cx="210" stroke-width="5" stroke="#000000" fill="#FF0000"/>
<circle id="svg_2" r="71.06335" cy="155" cx="383" stroke-width="5" stroke="#000000" fill="#FF0000"/>
</g>
</svg>
同様のトピックに関する数十の議論を読んだことがありますが、Windows 環境で実行されているものはありません。私の phpinfo() は SVG を「ImageMagick でサポートされている形式」としてリストしているため、「デコード デリゲートなし」メッセージをどうすればよいかわかりません。