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.