컴퓨터/Python

Python (8) - Base64 방식을 이용한 이미지 인코딩, 디코딩

달서비 2022. 12. 15. 23:48

졸업연구를 하던중 Base64 방식을 이용한 다양한 인코딩과 디코딩을 접하는 기회가 있었습니다. 해당 글에는 Base64란 무엇인가 그리고 파이썬을 이용한 인코딩, 디코딩을 올려보도록 하겠습니다.

 

Base64

base64 value & index

Base64코드는 64개의 문자로만 이루어진 문자 코드입니다. 우리가 일반적으로 사용하는 ASCII 코드는 128가지의 문자로 이루어져 있습니다. 따라서 매칭하여 문자열로 변환할 수 있습니다. 여기서 ASCII 코드를 사용하지 않은 이유는 문자만 이루어져 있지 않기 때문입니다. 문자열로만 전송하는 경우에는 상관이 없으나 인코딩하여 전송하는 경우에 오류가 날 수 있습니다. 안정적으로 인코딩을할 때 사용하기 위하여 해당 문자 코드가 사용됩니다.

 

ASCII to Base64 인코딩

안정적으로 변환할 수 있으나 단점 또한 있습니다. 위의 그림에서 보면 인코딩을 할 때 용량이 증가합니다. 위의 사진은 ASCII코드를 Base64로 변환하는 방법 이었습니다. 해당 단점 또한 가지고 있습니다.

 

알아야 할 것

base64 (base64방식으로 변환하기 위한 모듈)
b64encode('string') base64방식으로 인코딩하는 메서드
(binary → base64) 
b64decode('string') base64방식으로 디코딩하는 메서드
(binary → base64) 

 

소스코드 및 분석

아래의 소스 코드는 파일을 선택(이미지)하고 base64로 인코딩, 디코딩하여 result.png로 파일을 만드는 소스코드입니다. 실제로 사용할 때는 서버와 클라이언트와 소통하는 방식으로 사용할 수 있습니다.

 #-*- coding: utf-8 -*
import base64
from tkinter import filedialog

#tkinter를 이용한 파일 선택
files = filedialog.askopenfilename(initialdir="/", title = "파일을 선택 해 주세요")
f = open(files,'rb').read()

#base64 인코딩
encodeFile = base64.b64encode(f)
print(encodeFile)

#base64 디코딩
decodeFile = base64.b64decode(encodeFile)
e=open("result.png",'wb')
e.write(decodeFile)
e.close()