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로 인코딩하거나 base64에서 인코딩하기위한 많은 도구가 있습니다.

다음 은 svg testsuite 의 전체 입니다.


2
@Aleksandar 그것은 별도의 질문이며,이 사이트에서 그것에 대한 답변을 찾을 수 있다고 확신합니다 (base64로 인코딩하는 것은 svg 특정이 아닙니다).
Erik Dahlström

1
@Erik-동일한 svg 파일에서 동일한 이미지가 천 번 반복되었다고 가정하십시오. base64 데이터를 한 곳에 놓고 이미지가 해당 데이터를 참조하도록 할 수 있습니까?
Rohit Vats 18.54.

3
@Erik - 난 여기서 내 대답이 없어 될까요 마십시오 - stackoverflow.com/questions/16685014/...을 . 거기에 그룹화에 대한 답변에 대답하십시오. :)
Rohit Vats

3
네임 스페이스를있는 xlink그대로 선언하는 것을 잊지 마십시오 . xmlns:xlink="http://www.w3.org/1999/xlink"일부 브라우저 / 뷰어가 없으면 이미지가 보이지 않을 수 있습니다.
Marc_Alx

1
참고 : 내 경험에 따라 크롬 브라우저가 지정하지 않은 경우에도이 이미지를 표시 width하고 heightSVG 이미지 태그를. 그러나 이러한 속성을 생략하면 Firefox 및 IE에 이미지가 표시되지 않습니다. 따라서 반드시 지정하십시오!
Stonecrusher

23

여기에 SVG에 포함 된 데이터, 원격 및 로컬 이미지를 보여주는 바이올린을 HTML 페이지에 게시했습니다.

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/data-uris-and-caching
에릭 달 스트롬

정확히-svg 문서가 변경되면 포함 된 비트 맵이 동일하더라도 다시로드됩니다. http URL에 링크하면 svg 문서에 별도로 캐시 할 수 있습니다.
GarethOwen 2016 년

1
좋은 지적. Nick의 답변에 대한 나의 의견에서 svg 이미지에 비트 맵 이미지를 포함시키는 것이 합리적임을 알 수 있습니다. 당신이 옳지 만, 인코딩은 나쁘고 비효율적입니다. svg 이미지와 함께 이동 된 별도의 이진 인코딩 파일이어야합니다.
chmike

2

data:URL 을 사용하여 Base64 인코딩 버전의 이미지를 포함 할 수 있습니다 . 그러나 매우 효율적이지 않으므로 큰 이미지를 포함하지 않는 것이 좋습니다. 다른 파일에 링크 할 수없는 이유가 있습니까?


유스 케이스에 따라 다릅니다. 내가 고려하고있는 유스 케이스는 svg 파일이 복사되고 인터넷 액세스가 항상 사용 가능한 것은 아닙니다 (예 : 명함)입니다. 또한 IT 부서는 카드 사용을 비공개로 유지할 수 있습니다. 링크 된 이미지를 사용하면 이미지 소유자가 카드의 모든 디스플레이를 추적 할 수 있으며, 이는 카드 소유자에게는 흥미롭지 만 흥미로울 수 있습니다. 자체 포함 된 svg 이미지가 의미가 있습니다.
chmike

인터넷 어딘가를 가리키는 절대 URL을 사용하는 경우에도 마찬가지입니다. 그러나 SVG 파일이 로컬 인 경우 이미지도 포함되도록 상대 URL을 사용하는 것은 쉽습니다. 재배포 가능한 단일 파일이어야한다는 요구 사항이있는 경우 다시 변경됩니다.
Nick

SVG 그래픽을 자체 포함하려는 사용 사례, 즉 전체 이미지를 포함하는 하나의 파일이 있습니다. 이미지를 렌더링하기 위해 여러 파일을 전송 / 저장해야하는 것은 파일 시스템에서 이미지를 처리 ​​할 때 좋지 않습니다. 동기화되지 않거나 너무 쉽게 떨어질 수 있습니다.
Minok

-1

비트 맵을 포함시킬 수도 있습니다. 나는 당신도 그것에 변형을 사용할 수 있다고 생각합니다.


과연. 방금 w3.org/TR/SVG/struct.html#ImageElement 링크를 발견했습니다 . 불행히도 그것은 내가 질문에 언급되지 않은 내 관심사에 대답하지 않습니다. 질문을 편집하겠습니다.
chmike
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.