[1] 이미지 축소, 압축 그리고 저장하기



나는 블로그를 처음 해본 사람이기에 블로그를 전혀 다룰줄 모른다.

현재는 포스팅을 위한 사진을 올리는 것 조차 어렵다.


어제 밤, 블로그 프로필 사진에 사진을 올리려니 2MB 이상은 올릴 수 없었고, 아이콘은 100KB이하 32x32, 64x64가 권장 사이즈였기에 python을 이용하여 이미지를 압축, 리사이즈 해보았다.


나에게 필요한 것은 '블로그의 프로필용 사진 1장(2MB 이하)','아이콘용 사진 1장(64x64)이었고 원본 사진 크기는 2320 x 3088, 3.10MB을 사용.


내가 사용한 파이썬 코드는 아래와 같다.



import scipy.misc 
import cv2 
from PIL import Image

# 축소할 이미지 사이즈(w,h)
width = 100
height = 128

# 이미지가 있는 폴더 경로
file_path ='C:/Users/user/Desktop/blog/setting/'
# 가져올 이미지 이름
file_name = 'blogimage.jpg'
image_path = file_path + file_name

# 압축정도
value = 90

# 이미지 축소
def ImgResize(x):
    # cv2.imread : x 이미지를 cv2.imread를 통해 읽어와 resize함. (1 = color, 0 = gray scale)
    # cv2.resize : width,height 만큼 resize함. 축소를 위해 보간은 cv2.INTER_AREA
    x2 = cv2.resize(cv2.imread(x,1),(width,height), interpolation = cv2.INTER_AREA)
    # cv2 함수는 BGR로 이미지를 받아오기 때문에 RGB로 변환
    temp = cv2.cvtColor(x2, cv2.COLOR_BGR2RGB) 
    # temp를 폴더경로에 'bolg_icon.jpg'이름으로 저장.
    scipy.misc.imsave(file_path+'blog_icon.jpg', temp)
    
# 이미지 압축
def ImgCompress(x):
    with Image.open(x) as im:
        # 이미지를 불러와 value만큼 축소하여 폴더경로에 'compression_image.jpg' 이름으로 저장.
        im.save(file_path+'compression_image.jpg',quality = value)
        
ImgResize(image_path)
ImgCompress(image_path)
print()
print('successful !')

파이썬을 제대로 배워본적은 없기에 자세한 사항까지는 알지 못하지만 간단한 주석을 달아두었다.

이미지 객체 save에 대한 함수 파라미터로 quality 에 대한 내용은 https://docs.microsoft.com/ko-kr/dotnet/api/system.drawing.imaging.encoder.quality?view=netframework-4.7.2 원문을 참조하면 더 좋을거 같다. (제가 이해를 못해서..)


아무튼 위와 같은 코드의 결과는 아래과 같다.







임의로 C:\Users\user\Desktop\blog\setting\의 경로에 blogimage.jpg를 넣어두고 이 경로를 path로 코딩하였다. 

python을 run하면 입력해준 경로의 blogimage.jpg를 찾아 ImgResize와 ImgCompress인 사용자 정의 함수를에 input으로 넣는다.

두 함수를 거쳐 blog_icon.jpg와 compression_image.jpg 이미지 생성.

- ImgResize 함수를 통해  2320 x 3088(input) -> 100x128(output) (64x64도 가능하지만 나는 이렇게 했다.)

- ImgCompress 함수를 통해 3.10MB(input) -> 1.83MB(output) 가 된다. (2MB에 근접하게 맞추기 위해 압축을 조금 함.)





참고) 경로 붙여넣기 할 때, \을 /로 바꿔주셔야 Unicode 에러 안떠요.









참고 사이트


- 압축 

http://slays.tistory.com/44