본문 바로가기
+ Development/Python

[Python] 파이썬 이미지 용량 줄이기

by :: Teacher :: 2022. 1. 29.
728x90
반응형

[Python] 파이썬 이미지 용량 줄이기

티스토리에서 글을 작성하면서 설명 등을 하면서 이미지를 첨부하여 올리는 경우가 많이 있다. 

이때 이미지도 많고 용량이 크다면 글을 로딩하는데 많은 시간이 걸리게 된다. 

처음부터 이미지를 잘 만들면 되겠지만 그것도 쉽지 않다. 

물론 여러 온라인 웹 사이트 등에서 이미지 용량을 줄여주는 부분도 많이 있지만 파일의 수도 제한적이고, 계속적으로 올려야 한다는 번거로움도 있다.

그래서 기존에 사용했었던 Pillow 라이브러리를 이용해서 온라인 웹 사이트에서 해주는 것과 똑같은 거를 만들어 보았다.

이미지만 특정 디렉토리에 넣고 변경 후 새롭게 저장될 디렉토리만 지정해주면 이미지 수가 몇 개가 되던, 용량이 얼마이던 상관없이 사용 가능하다. 

728x90

1. Code 설명

아래 Code를 보면 쉽게 이해가 되겠지만 간단하게 설명을 남겨 놓겠다. 

original_path는 원본 이미지가 있는 경로,  change_path는 이미지 용량을 변경한 후 새롭게 저장될 경로를 지정만 해주면 된다.

물론 Qualty(품질) 퍼센트(%)도 정할 수 있다. 

다만, 경험을 해보니 70 ~ 90% 정도 이외에는 이미지가 깨지는 부분이 존재할 수 있기에 70 ~ 90% 사이에서 사용하는 걸 추천한다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
from PIL import Image


def change_img_qualty(original_path, change_path, qualty=85):
    """
    Change Image Qualty
    :param original_path: 원본 경로
    :param change_path: 변경 후 새롭게 저장될 경로
    :param qualty: Qualty(품질) 퍼센트(기본 : 85%)
    :return:
    """
    if not os.path.exists(change_path):
        os.mkdir(change_path)
    try:
        ims_list = os.listdir(original_path)
        ims_list.sort()
    except FileNotFoundError as e:
        print("이미지 원본 디렉터리가 존재하지 않습니다...")
        sys.exit(0)
    success_cnt = 0
    fail_cnt = 0
    for filename in ims_list:
        file = original_path + filename
        try:
            im = Image.open(file)
            im.save(os.path.join(change_path, filename), qualty=qualty)
            print("+ 성공 : {success}\n  "
                  "- {success_path}"
                  .format(success=file, success_path=os.path.join(change_path, filename))
                  )
            success_cnt += 1
        except Exception as e:
            print("+ 실패 : {fail}".format(fail=file))
            fail_cnt += 1
    print("\n성공 : {success_cnt} 건 / 실패 : {fail_cnt} 건".format(success_cnt=success_cnt, fail_cnt=fail_cnt))
    sys.exit(0)


if __name__ == '__main__':
    original_path = '/Desktop/tmp/0/'
    change_path = '/Desktop/tmp/1/'
    change_img_qualty(original_path, change_path)
    
    
[output]
+ 실패 : /Desktop/tmp/0/.DS_Store
+ 성공 : /Desktop/tmp/0/0.jpg
  - /Desktop/tmp/1/0.jpg
+ 성공 : /Desktop/tmp/0/0.png
  - /Desktop/tmp/1/0.png
+ 성공 : /Desktop/tmp/0/1.png
  - /Desktop/tmp/1/1.png

성공 : 3 건 / 실패 : 1 건

 

1. Code 설명
1. Code 설명

이 처럼 이미지 사이즈가 줄어드는 것을 확인 할 수 있다.

Qualty(품질) 설정에 따라서, 이미지 포멧에 따라서 사이즈 변화가 더 크게 날 수도 있다.

반응형

 2. 예제 Code

매우 간단한 방법으로 이미지 사이즈 변환하는 방법에 대해서 알아보았다.

위에 작성한 예제 파일은 ex_qualty.py 파일명으로 itschool-info-lab Github에 올려놓았다.

728x90
반응형

댓글


loading