Python으로 이미지 압축 및 웹p 이미지 생성
거치다
사이트를 만드는 과정에서 이미지를 압축하고 웹 이미지를 만들 때
구글 변환 도구를 사용하여 webp 이미지 생성
소규모 사이트였으면 좋겠지만 대규모 사이트와 환경이 있어도 공유할 수 없는 상황 등을 고려해 도구를 만들어 봤다.
개발 환경
목표
이번에는 Python을 배우고 있기 때문에 데스크톱에서 사용할 수 있는 프로그램을 만들어야 합니다.
최종 품목
/dist/image_controller.exe
최종 품목사용할 라이브러리
Pillow
PySimpleGUI
사전 준비
$ pip install Pillow
$ pip install pysimplegui
실시
원하는 라이브러리 가져오기
# 画像圧縮のライブラリをImportする
from PIL import Image, ImageFilter
# ファイルを取得するためのライブラリをImportする
import glob
import os
#GUI生成するライブラリをImportする
import PySimpleGUI as sg
이미지 소스 압축
# 圧縮のクオリティ
quality = 70
# 画像が格納されているディレクトリを指定する
path = 'path/to/dir'
files = glob.glob(path + '/*')
# ディレクトリ内の画像をループで処理する
for file in files :
# 画像の情報を取得
image = Image.open(file)
# 画像を圧縮してセーブする
image.save(path + '/' + os.path.split(file)[1], optimize=True, quality=quality)
웹 이미지로 JPG, PNG 저장
# 画像が格納されているディレクトリを指定する
path = 'path/to/dir'
files = glob.glob(path + '/*')
# ディレクトリ内の画像をループで処理する
for file in files :
image.save(path + '/' + os.path.split(file)[1].split('.')[0] + '.webp', 'webp')
이로써 압축, 웹 이미지 생성을 진행할 수 있다GUI 구현
# GUIのテーマを選択する
sg.theme('Reddit')
# GUIに必要な要素を配列で格納する
layout = [
[sg.Text(' パス'), sg.InputText(key='path', size=(40,8))],
[sg.Text('webp画像を生成する'), sg.Checkbox('',key='is_webp', default=False)],
[sg.Text('実行結果'),sg.MLine(key='output'+sg.WRITE_ONLY_KEY, size=(40,8))],
[sg.Button('実行')]
]
# Windowを生成する
window = sg.Window(title='Image controller', layout=layout)
# Window内の処理を記載する
while True:
event, values = window.read()
# Windowが閉じられたときの処理
if event == sg.WINDOW_CLOSED or event == 'Quit':
break
# ここに実行をクリックしたときの処理を記載する
# syori();
GUI를 설치했을 뿐입니다. Python 파일을 실행하면 최종 품목과 같은 외관의 GUI가 있습니다.파이썬 파일로 결합
# ------------------------------ Settings ------------------------------ #
# 画像圧縮のライブラリ
from PIL import Image, ImageFilter
# ファイルを取得するためのライブラリ
import glob
import os
#GUI
import PySimpleGUI as sg
# ------------------------------ Config ------------------------------ #
# 圧縮のクオリティ
quality = 70
# GUI
sg.theme('Reddit')
layout = [
[sg.Text(' パス'), sg.InputText(key='path', size=(40,8))],
[sg.Text('webp画像を生成する'), sg.Checkbox('',key='is_webp', default=False)],
[sg.Text('実行結果'),sg.MLine(key='output'+sg.WRITE_ONLY_KEY, size=(40,8))],
[sg.Button('実行')]
]
window = sg.Window(title='Image controller', layout=layout)
# テーマの確認
# sg.preview_all_look_and_feel_themes()
# ------------------------------ 画像圧縮の処理 ------------------------------ #
def compression(file) :
# 画像の情報を取得
# フォーマット image.format
# サイズ image.size
# カラーモード image.mode
image = Image.open(file)
# 画像を圧縮してセーブする (values['path']でGUIで入力したパスが取得できる)
image.save(values['path'] + '/' + os.path.split(file)[1],optimize=True,quality=quality)
# メッセージをGUIに表示する
window['output'+sg.WRITE_ONLY_KEY].print(os.path.split(file)[1] + ' is compressed.')
def initalizeWebp(file) :
image = Image.open(file)
# webpに変換してセーブする (values['path']でGUIで入力したパスが取得できる)
image.save(values['path'] + '/' + os.path.split(file)[1].split('.')[0] + '.webp', 'webp')
# メッセージをGUIに表示する
window['output'+sg.WRITE_ONLY_KEY].print(os.path.split(file)[1] + ' is initalize webp image.')
# ------------------------------ GUIの処理 ------------------------------ #
# Windowの処理
while True:
event, values = window.read()
# See if user wants to quit or window was closed
if event == sg.WINDOW_CLOSED or event == 'Quit':
break
files = glob.glob(values['path'] + '/*')
for file in files :
compression(file)
# チェックボックスがチェックされていたら実行
if (values['is_webp'] == True) :
initalizeWebp(file)
웹 페이지 정보
https://note.com/kohaku935/n/n721e5e620839
https://qiita.com/dario_okazaki/items/656de21cab5c81cabe59
PysimpleGUI의 공식 문서는 통속적이고 알기 쉽게 쓰여 참고할 만하다.
https://pysimplegui.readthedocs.io/en/latest/
지원
Python 파일의 exe화는 다음과 같은 도구를 사용합니다.
https://techacademy.jp/magazine/18963
가져오기에서 실행까지 간단하기 때문에 추천합니다.
Reference
이 문제에 관하여(Python으로 이미지 압축 및 웹p 이미지 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Reini/items/0f34937181407049f0b5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)