티스토리에서 글을 작성하면서 설명 등을 하면서 이미지를 첨부하여 올리는 경우가 많이 있다.
이때 이미지도 많고 용량이 크다면 글을 로딩하는데 많은 시간이 걸리게 된다.
처음부터 이미지를 잘 만들면 되겠지만 그것도 쉽지 않다.
물론 여러 온라인 웹 사이트 등에서 이미지 용량을 줄여주는 부분도 많이 있지만 파일의 수도 제한적이고, 계속적으로 올려야 한다는 번거로움도 있다.
그래서 기존에 사용했었던 Pillow 라이브러리를 이용해서 온라인 웹 사이트에서 해주는 것과 똑같은 거를 만들어 보았다.
이미지만 특정 디렉토리에 넣고 변경 후 새롭게 저장될 디렉토리만 지정해주면 이미지 수가 몇 개가 되던, 용량이 얼마이던 상관없이 사용 가능하다.
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 건
이 처럼 이미지 사이즈가 줄어드는 것을 확인 할 수 있다.
Qualty(품질) 설정에 따라서, 이미지 포멧에 따라서 사이즈 변화가 더 크게 날 수도 있다.
2. 예제 Code
매우 간단한 방법으로 이미지 사이즈 변환하는 방법에 대해서 알아보았다.
위에 작성한 예제 파일은 ex_qualty.py 파일명으로 itschool-info-lab Github에 올려놓았다.
'+ Development > Python' 카테고리의 다른 글
[Python] UnixTime 변환하기(Unixtime To Date) (0) | 2021.12.30 |
---|---|
[Python] 파이썬 SQLite3 이용하기 (0) | 2021.07.18 |
[Python] 오늘 날짜의 요일 확인하기(Check the day of the week for today's date) (0) | 2021.07.17 |
[Python] 파이썬 PIL(Pillow) 라이브러리를 이용한 이미지 변환(2편) (0) | 2021.07.05 |
[Python] 파이썬 PIL(Pillow) 라이브러리를 이용한 이미지 변환(1편) (0) | 2021.07.05 |
댓글