프로그래밍언어/VB.NET

XML에 이미지 base64로 넣기

부산딸랑이 2013. 6. 14. 01:07

참고  : http://all4cs.tistory.com/79

          http://yyman.tistory.com/208


XML에 image를 그냥 binary로 넣으면 깨져서 나온다.

base64형식으로 xml에 넣어야 한다.


IBM : XML에서 데이터 처리하기

http://www.ibm.com/developerworks/kr/library/x-cdata/

XML에 2진 데이터 저장하기

접기

XML에 2진 데이터 저장하기

XML 문서에 2진 데이터를 포함해야 하는 경우에는 XML 구문 분석기에 문제를 일으키지 않도록 해야 한다. 데이터가 텍스트인 경우 해당 데이터를 CDATA 섹션에 덤프하여 완료할 수 있지만 안전하고 복구 가능한 방식으로 2진 데이터를 인코딩해야 한다.

다행히 MIME 표준은 지원이 잘 되는 안전한 인코딩 스키마인 base64를 정의한다. base64 인코딩을 사용하면 2진 데이터가 원래 크기의 약 137%로 되기 때문에 XML 문서에 2진 데이터를 임베드하는 기능을 위해 추가적인 스토리지 공간(및 약간의 처리 속도)의 감소를 감내한다.

일반적으로는 Listing 9와 같이 XML에 인코딩 및 원래 파일 이름을 표시하려고 한다.


Listing 9. XML 문서에 있는 base64 인코딩된 파일의 한 가지 예제
<?xml version="1.0" encoding="UTF-8"?>
<sample>
    <description>
    An embedded image file.
    </description>
    <image name="stop.png" encoding="base64"
        source="FamFamFam"
        href="http://www.famfamfam.com/lab/icons/silk/">
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQ
CAYAAAAf8/9hAAAABGdBTUEAAK/INwWK
6QAAABl0RVh0U29mdHdhcmUAQWRvYmUg
SW1hZ2VSZWFkeXHJZTwAAAJOSURBVDjL
pZI9T1RBFIaf3buAoBgJ8rl6QVBJVNDC
ShMLOhBj6T+wNUaDjY0WmpBIgYpAjL/A
ShJ+gVYYYRPIony5IETkQxZ2770zc2fG
YpflQy2MJzk5J5M5z/vO5ESstfxPxA4e
rL4Zuh4pLnoaiUZdq7XAGKzRJVbIBZ3J
PLJaD9c/eCj/CFgZfNl5qK5q8EhTXdxx
LKgQjAFr0NK0ppOpt9n51D2gd2cmsvOE
lVcvOoprKvuPtriNzsY8rH+H0ECoQEg4
WklY1czP8akZby51p6G3b6QAWBl43llS
VTlUfuZE3NmYh9Vl0HkHSuVq4ENFNWFd
C+uJ5JI/9/V2Y//rkShA1HF6yk/VxJ0f
07CcgkCB7+fSC8Dzcy7mp4l9/khlUzwe
caI9hT+wRrsOISylcsphCFLl1RXIvBMp
YDZJrKYRjHELACNEgC/KCQQofWBQ5nuV
64UAP8AEfrDrQEiLlJD18+p7BguwfAoB
UmKEsLsAGZSiFWxtgWWP4gGAkuB5YDRW
ylKAKIDJZBa1H8Kx47C1Cdls7qLnQTZf
fQ+20lB7EiU1ent7sQBQ6+vdq2PJ5dC9
ABW1sJnOQbL5Qc/HpNOYehf/4lW+jY4v
h2tr3fsWafrWzRtlDW5f9aVzjUVj72Fm
CqzBypBQCKzbjLp8jZUPo7OZyYm7bYkv
w/sAAFMd7V3lp5sGqs+fjRcZhVYKY0xu
pwysfpogk0jcb5ucffbbKu9Esv1Kl1N2
+Ekk5rg2DIXRmog1Jdr3F/Tm5mO0edc6
MSP/CvjX+AV0DoH1Z+D54gAAAABJRU5E
rkJggg==
    </image>
</sample>

시스템에서 생성된 XML 문서에서는 공백을 그대로 두고 줄 바꾸기 문자 없이 전체 base64 인코딩된 파일을 함께 실행할 수 있다.

문제 예방하기

XML의 2진 데이터를 처리하는 가장 좋은 방법은 전부를 회피하는 것이다. HTML에서 확인했듯이 표준화된 방식으로 외부 파일을 참조하는 것은 제대로 작동된다. 클라이언트 애플리케이션에서 외부 파일을 가져오는 방식이 있는 경우에는 매우 좋은 옵션이다. HTML의 경우 브라우저는 <img>와 같은 요소를 통해 포함된 데이터를 가져오기 위해 또다른 HTTP 요청을 작성한다.

XML에 직접 2진 데이터를 포함하지 않음으로써 잠재적으로 낭비되는 텍스트 인코딩을 예방하고 대부분의 사용자가 웹 브라우저에서 애용하는 이미지 캐싱과 같은 다른 개선사항을 구현할 수 있다.

접기





[-] Collapse


                            XmlElement childe3 = XmlDoc.CreateElement("backgroundImage");

                            FileStream fs = new FileStream(picture.mImageLocation, FileMode.Open, FileAccess.Read);
                            Byte[] bt = new Byte[fs.Length];
                            fs.Read(bt, 0, bt.Length);
                            fs.Close();
                            childe3.InnerText = Convert.ToBase64String(bt);
                            root.AppendChild(childe3);


'프로그래밍언어 > VB.NET' 카테고리의 다른 글

드래그앤드롭으포 파일명표시  (0) 2013.06.21
webrequest 파일다운  (0) 2013.06.18
이미지 포맷변환  (0) 2013.06.05
정규식 regex.split  (0) 2013.05.30
엑셀에 HTML소스 가져오기(VBA)  (0) 2013.05.24