파이썬: 이미지 바이너리 단위 저장

Posted by 드린
2017. 11. 19. 21:38 IT

저번 시간에는 urllib.request.urlretrieve() 함수를 사용하여 이미지를 저장하였습니다.

이번 시간에는 바로 이미지를 저장하는 것이 아니라,

이미지를 바이너리 단위로 불러와

저장하는 과정으로 진행을 해보겠습니다.


이 과정의 장점은 메모리 위에 데이터를 올릴 수 있다는 것입니다.

순서는 데이터를 추출하고 파일을 저장합니다.


우리가 사용하게 될 함수는 request.urlopen() 함수 입니다.

이 함수는 영어 그대로 URL 리소스를 열기만 합니다.

우리는 추가적으로 read()라는 함수를 덧붙여서 데이터를 읽어 들여야 합니다.


이후에는 파이썬에서 기본적으로 제공하고 있는 

입출력 함수인 open() 함수를 사용하여 파일을 저장할 것입니다.


open 함수의 모드에는 읽기 모드, 쓰기 모드 등이 있는데,

이때 우리는 바이너리 모드와 쓰기 모드가 필요합니다.

쓰기의 w

바이너리의 b

합쳐서 우리는 wb라는 모드를 사용하게 될 것입니다.


그럼 소스를 보면서 설명하죠.

import urllib.request

drinsBlogImage = "https://img1.daumcdn.net/thumb/R1920x0/?fname=http%3A%2F%2Fcfile6.uf.tistory.com%2Fimage%2F996567335A115BF0062F9F"
saveName = "image2.png"

urlOpen = urllib.request.urlopen(drinsBlogImage).read()

with open(saveName, mode="wb") as w:
w.write(urlOpen)
print("파일이 저장되었습니다.")

4번째 줄까지는 저번시간과 동일하니 생략하고,

다음으로 urlOpen은 위에서 설명하였고,

그 이후에 with이라는 생소한 코드가 나옵니다.


파일 입출력을 사용하신다면 with은 꼭 사용해 주셨으면 합니다.

정말 간단하고 좋거든요.

보통 파일 입출력을 할때 try catch문을 작성하는데,

with을 사용하면 알아서 처리해줍니다.

또한 close까지 동시에 처리해줍니다.


이런 편한 코드를 사용을 안 할 수가 없겠죠?

as 는 open(saveName, mode="wb")를 줄여 w라고 별칭을 주는 것입니다.

만약 as f 라고 작성하였다면,

그 아래 코드는 f.write()가 되는 것입니다.


w.write()에서는 우리가 읽어들였던 이미지 바이너리를 파일에 쓰게 되는 것입니다.

쓰기가 정상적으로 수행되었음을 확인하기 위하여 print함수로 확인하였습니다.


그럼 실행 결과를 보도록 하죠.


파일이 저장되었습니다 라는 문구가 뜨게 되고,


위와 같이 정상적으로 이미지 파일 다운로드가 된 것을 확인하실 수 있습니다.

이 댓글을 비밀 댓글로