2

PHP Imagick ライブラリを使用して SVG を画像に変換する際に問題が発生しています。これが私のコードです:

$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg style="overflow: hidden; position: relative;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="754" version="1.1" height="565">
    <defs></defs>
    <image transform="matrix(1,0,0,1,0,0)" preserveAspectRatio="none" x="0" y="0" width="754" height="565" xlink:href="http://1439.demo.tekk3.com/wp-content/uploads/2012/10/capapix_Harley_Davidson_FLSTCI_-_Heritage_Classic.jpg"></image>
</svg>';

$im = new Imagick();
$im->readImageBlob($svg);
$im->setImageFormat("jpeg");
$im->writeimage($attached_file);
$im->clear();
$im->destroy();

その結果、白い背景だけの画像になります。SVG が表示されている他の画像はありません。

テキストタグをSVG文字列に入れると、テキストのみが白い背景でレンダリングされます。画像はまだありません。

php5-imagick、libxml2、librsvg2-bin をインストールしました

正しい結果を得るためにインストールする必要がある他の拡張機能はありますか? または、私のコードに問題がありますか?

4

3 に答える 3

3

回避策を見つけました。画像パスの base64 画像コンテンツ インスタンスを使用します。

$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
        <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="754" version="1.1" height="565">
        <image x="0" y="0" width="754" height="565" xlink:href="'.imageToBase64('icons-weather_01.png').'"></image>
    </svg>';

function imageToBase64($path) {
    $type = pathinfo($path, PATHINFO_EXTENSION);
    $data = file_get_contents($path);
    return 'data:image/' . $type . ';base64,' . base64_encode($data);
}

可能であれば、ローカルの画像または Web URL を使用できます。

于 2016-01-07T13:03:18.850 に答える
0

変換時に Imagick に画像を考慮させたい場合は、画像へのリンクを使用しないでください。代わりに、これらの画像に対応する base64 でエンコードされたデータを使用してください。これは機能します。

于 2013-04-29T13:35:24.137 に答える
0

私はこの問題を抱えていて、ここにたどり着きました.とにかく自分で修正するまで、コメントに解決策が表示されませんでした(「コメントをさらに表示」をクリックする必要がありました)ので、回答として投稿する価値があると思いました(および賛成):

@Phuc-Pham が発見したように、問題は Imagick が、href 属性の CWD または HTTP ドキュメント ルートへの相対パスではなく、サーバー パス全体を必要とすることです。

したがって、ソリューションの上で彼のコードを使用すると、次のようになります。

$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg style="overflow: hidden; position: relative;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="754" version="1.1" height="565">
    <defs></defs>
    <image transform="matrix(1,0,0,1,0,0)" preserveAspectRatio="none" x="0" y="0" width="754" height="565" xlink:href="/path/to/htdocs/wp-content/uploads/2012/10/capapix_Harley_Davidson_FLSTCI_-_Heritage_Classic.jpg"></image>
</svg>';

それが役に立つことを願っています。

于 2015-05-05T15:06:18.500 に答える