본문 바로가기

computer/algorithm

JSON으로 이미지를 전달하려면 어떻게 할 것인가?

남세동님의 질문 2번. JSON으로 이미지를 전달하려면 어떻게 할 것인가?와 하위 질문 a, b를 알아보자.

 

JSON형식은 xml에 뒤이어 발표된 표준형식으로 서버-클라이언트가 텍스트로 데이터를 주고받는데 사용한다.

이미지의 바이너리를 문자열로 변환하고 JSON의 형태로 표현하여 전송하면 된다.

 

파이썬으로 JSON으로 이미지를 전달해보자.

 

이미지를 바이너리로 읽은 후 base64로 인코딩을 한다.

json.dumps()를 실행할때 딕셔너리에 bytes 타입이 있으면 함수는 type error를 반환하기때문에 decode()를 하여 문자열로 변환하였다.

 

실행 결과는 그림1과 같다.

 

import base64
import json

with open("test_image.png", "rb") as image_file:
    image_binary = image_file.read()
    encoded_string = base64.b64encode(image_binary)

    image_dict = {
        "test_image.png": encoded_string.decode()
    }

    image_json = json.dumps(image_dict)

    print(image_json)

 

 

그림1. 이미지 json 프린트 화면

 

a. 에 답을 하자면 그림2에서는 3KB만큼 커진 것을 확인할 수 있다.

이미지의 바이너리를 base64 인코딩하고 이를 텍스트로 변환하였는데, base64로 인코딩하는 과정에서 1/3정도의 용량이 증가한다.

 

 

그림2. png, json 크기 비교

 

만약에 json의 필드를 압축하여 담을 수 있는 방법이 있다면 json 파일의 크기는 줄어들 수 있다.

 

b. json으로 이미지를 전달하는 단점은 무엇이 있을까?

두 번째 레퍼런스에 의하면 용량이 커짐으로써 오는 단점과 함께 CDN caching을 사용하기 어렵다.

디바이스에서 이미지 캐싱이 가능하지 않다. 

보안상 장점이 없고 이미지를 다루는 서버사이드의 툴들이 이미지의 바이너리를 주로 다룬다는 점을 짚었다.

 

 

Reference

https://t4716.tistory.com/27

https://stackoverflow.com/questions/42982422/what-are-the-pros-and-cons-of-base64-file-upload-through-json-as-opposed-to-aja

 

 

'computer > algorithm' 카테고리의 다른 글

PNG에서 투명을 표현하는 방법  (0) 2022.01.15
백준1260 - DFS와 BFS  (0) 2021.11.28
P NP 문제  (0) 2021.08.16
해시테이블 구현 - 파이썬  (2) 2020.08.10
해시테이블 구현 - 자바  (0) 2020.08.10