SVGはビットマップ画像の埋め込みをサポートしていますか?


147

SVG画像は純粋にベクトルであるか、またはビットマップ画像をSVG画像に結合できますか?ビットマップ画像に適用された変換(パースペクティブ、マッピングなど)はどうですか?

編集:画像はリンク参照によってSVGに含まれる場合があります。http://www.w3.org/TR/SVG/struct.html#ImageElementを参照してください。私の質問は、ビットマップ画像がsvg内に含まれて、svg画像が自己完結するかどうかということでした。それ以外の場合、svgイメージが表示されるときは常に、リンクをたどってイメージをダウンロードする必要があります。どうやら.svgファイルは単にxmlファイルです。

回答:


207

はい、<image>要素から任意の画像を参照できます。そして、データURIを使用してsvgを完全に自己完結させることができます。例:

<image width="100" height="100" xlink:href="data:image/png;base64,...">

ドットは、エンコードされたbase64データを追加する場所です。通常、svgをサポートするベクターグラフィックスエディターには、埋め込まれた画像を保存するオプションがあります。それ以外の場合は、base64との間でエンコードするためのツールがたくさんあります。

これはsvgテストスイートからの完全なです。


2
@Aleksandarこれは別の質問です。このサイトでその答えを見つけることができると思います(base64へのエンコードはsvg固有ではありません)。
ErikDahlström2013年

1
@Erik-同じ画像が同じsvgファイルで何千回も繰り返されているとします。base64データを1か所に配置して、そこからイメージにそのデータを参照させることはできますか?
Rohit Vats 2013年

3
@Erik -私はここから私の答えを持って気にしない- stackoverflow.com/questions/16685014/...を。そこにグループ化することについての話に答えます。:)
Rohit Vats 2013年

3
名前空間をxlinkそのまま宣言することを忘れないでください:xmlns:xlink="http://www.w3.org/1999/xlink"一部のブラウザー/ビューアーはそれなしでは画像を表示しない可能性があります
Marc_Alx

1
FYI:私の経験に応じてChromeブラウザを使用すると、指定しない場合でも、この画像を表示widthし、heightSVG画像タグに。ただし、これらの属性を省略した場合、FirefoxとIEは画像を表示しません。必ず指定してください!
Stonecrusher 2017

23

ここにフィドルを投稿し、HTMLページ内のデータ、SVGに埋め込まれたリモートおよびローカルの画像を示します。

http://jsfiddle.net/MxHPq/

<!DOCTYPE html>
<html>
<head>
    <title>SVG embedded bitmaps in HTML</title>
    <style>

        body{
            background-color:#999;
            color:#666;
            padding:10px;
        }

        h1{
            font-weight:normal;
            font-size:24px;
            margin-top:20px;
            color:#000;
        }

        h2{
            font-weight:normal;
            font-size:20px;
            margin-top:20px;
        }

        p{
            color:#FFF;
            }

        svg{
            margin:20px;
            display:block;
            height:100px;
        }

    </style>
</head>

<body>
    <h1>SVG embedded bitmaps in HTML</h1>
    <p>The trick appears to be ensuring the image has the correct width and height atttributes</p>

    <h2>Example 1: Embedded data</h2>
    <svg id="example1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
        <image x="0" y="0" width="5" height="5" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
    </svg>

    <h2>Example 2: Remote image</h2>
    <svg id="example2" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
        <image x="0" y="0" width="275" height="95" xlink:href="http://www.google.co.uk/images/srpr/logo3w.png" />
    </svg>

    <h2>Example 3: Local image</h2>
    <svg id="example3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
        <image x="0" y="0" width="136" height="23" xlink:href="/img/logo.png" />
    </svg>


</body>
</html>

17

データURIを使用して、画像データを提供できます。次に例を示します。

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">

<image width="20" height="20" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>

</svg>

画像はすべての通常のsvg変換を通過します。

ただし、この手法には欠点があります。たとえば、画像はブラウザによってキャッシュされません。


SVGでデータURIが必要な場合、これはおそらく不利ではありません-私は私の答えを編集します
GarethOwen

埋め込み画像(データURI)は、それらが含まれているドキュメントとともにキャッシュされます。たとえば、stackoverflow.com
questions / 4791807

正確-svgドキュメントが変更された場合、埋め込まれているビットマップは、たとえ同じであっても再読み込みされます。http URLにリンクする場合、これはsvgドキュメントに個別にキャッシュできます。
GarethOwen、2011年

1
いい視点ね。Nickの回答に対する私のコメントでは、ビットマップ画像をsvg画像に埋め込むのが合理的であることがわかります。あなたの言う通りですが、エンコーディングは不適切で非効率的です。これは、svgイメージと一緒に移動される個別のバイナリエンコードファイルである必要があります。
chmike

2

data:URLを使用して、Base64でエンコードされたバージョンの画像を埋め込むことができます。しかし、それはあまり効率的ではなく、大きな画像を埋め込むことはお勧めしません。別のファイルにリンクする何らかの理由が現実的ではありませんか?


ユースケースによって異なります。私が検討しているユースケースは、svgファイルがコピーされ、インターネットアクセスが常に利用できるとは限らない場合(つまり、ビジネスカード)です。また、カードの使用を非公開にすることもできます。リンクされた画像を使用すると、画像の所有者は、カードのすべての表示を追跡できます。自己完結型のsvg画像は意味があります。
chmike

これは、インターネット上のどこかを指す絶対URLを使用する場合にも当てはまります。ただし、相対URLを使用するのは簡単なので、SVGファイルがローカルの場合、画像もローカルになります。単一の再頒布可能ファイルでなければならないという要件もある場合は、それによって再び状況が変わります。
Nick

SVGグラフィックを自己完結させたい場合、つまり、画像全体を含む1つのファイルを使用する場合があります。ファイルシステムで画像を処理する場合、画像を確実にレンダリングするために複数のファイルを転送/保存することは良いことではありません。
Minok 2013年

-1

ビットマップを含めることもできます。その上で変換を使用することもできると思います。


確かに。私はこのリンクを見つけました:w3.org/TR/SVG/struct.html#ImageElement。残念ながら、質問に記載されていないことに気付いた私の懸念には答えません。質問を編集します。
chmike
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.