底辺SE奮闘記

年収300万SEブログ

【PHP】meyfa/php-svgでSVGをPNGにして保存する(テキスト付き)

追記

↓でもう少し詳し目の記事を描きました。

uma-no-kawa.hateblo.jp

環境

github.com

meyfa/phpの導入

composerで導入します。

composer require meyfa/php-svg

テキストを使用する場合は、gd以外にも

--with-freetype-dir=/usr

拡張設定が必要です。

phpenvの場合は、

(MAC)

$HOME/.phpenv/plugins/php-build/share/php-build/default_configure_options

に先ほどの拡張設定を追記して、

phpenv uninstall [PHPバージョン]
phpenv install [PHPバージョン]

としてPHPをインストールしなおすのが簡単で良いかと思います。

利用方法

<?php
use SVG\SVG;
use SVG\Nodes\Texts\SVGText;
use SVG\Nodes\Structures\SVGFont;

//SVGオブジェクトの準備
//文字列から生成の他、ファイルから、空の状態からなどあります。
$svg = '<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500">
    <circle cx="150" cy="200" r="100" fill="#06f"></circle>
    </svg>';
$image = SVG::fromString($svg);

//文字を表示する場合
$font = new SVGFont('IPAex明朝', "font/ipaexm.ttf");
$image->getDocument()->addChild($font);
$image->getDocument()->addChild(
    (new SVGText('こんにちは', 50, 50))
        ->setFont($font)
        ->setSize(30)
        ->setStyle('fill', '#f00')
    );

//イメージのラスタライズ
$rasterImage = $image->toRasterImage(500, 500);

// ブラウザ上に表示する場合
echo $image->toXMLString();

// 保存する場合
imagepng($rasterImage, "my-image.png");

使用フォントについて

フォントは下記サイトより、DLさせていただきました。

ipafont.ipa.go.jp