본문 바로가기
파이썬/파이썬 기초

파이썬으로 JPG, PNG 이미지 WEBP로 변환하기

by 이박수 2025. 1. 4.

오늘은 파이썬으로  JPG 파일이나 PNG 파일을 WEBP로 변환하는 방법에 대하여 알아보겠다. 

최근 구글에서 JPG나 PNG 이미지보다는 webp 이미지를 많이 활용한다고 한다. 아무래도 파일의 용량이 적어 서버에 부담을 주지 않기 떄문인것 같다.

 

그래서 웹 사이트를 운영하거나 블로그를 운영할떄도 webp 포맷을 많이 사용하는 것 같아 파이썬으로 구현해보고자 한다.

 

파이썬 webp 변환, 왜 해야할까?

웹사이트 속도 개선

웹 사이트의 로딩 속도가 느리면 기다리는 사용자는 거의 없을 것이다. 특히 한국인이라면 조금만 로딩이 걸린다 싶으면 바로 나가기 버튼을 누르는 특성이 있다. (나만 그런가?) 암튼 로딩 속도가 빠르면 유저의 만족도를 높이고, 체류 시간이 길어지게 된다.

구글과 같은 검색엔진은 웹 사이트 속도를 중요한 순위 요소로 보고 있어, SEO 향상에도 도움이 된다. 그래서 구글에서 상위 노출을 노리는 블로그나 웹 페이지의 경우 webp로 변환하고 있다.

또한 네트워크 속도가 불안정한 모바일 환경에서도 속도의 개선이 가능하므로 webp 를 사용하는 추세 인가 보다.

이미지 용량 감소 및 트래픽 절약

아무튼 webp로 변환 하게 되면 이미지 용량이 줄어든다. 그러면 곧 서버 저장 공간을 줄일 수 있고, 비용 절감이 되지 않을까 싶다. 또한 웹 서버 입장에서 데이터 전송량을 의미하는 트래픽이 줄어 들기때문에 이미지 용량이 줄어든다면 대여폭 비용을 절감할 수 있을것 같다.

그래서 결론은 jpg, png 보다 webp를 쓰자

 

필요한 라이브러리 설치

webp 변환을 위해서는 크게 많은 라이브러리가 필요하지 않다. 

PIL 하나만으로 구현이 가능하다. 우선 PIL을 설치해 보자. 설치는 pip로 하면 될 것이다. 

 

pip install Pillow

 

파이썬 코드 WEBP 변환 코드

우선 PIL와 os를 임포트 하자.

from PIL import Image
import os

 

그 다음 이미지를 변환하는 함수를 구현해 줄것이다.

함수를 구현할때, 원본 이미지 폴더, 변환 이미지 폴더를 구분하여 작업을 하자.

def process_directory(input_dir, output_dir):
  

    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
  
    supported_formats = ('.jpg', '.jpeg', '.png')
    
 
    for filename in os.listdir(input_dir):
        if filename.lower().endswith(supported_formats):
            input_path = os.path.join(input_dir, filename)
           
            output_filename = os.path.splitext(filename)[0] + '.webp'
            output_path = os.path.join(output_dir, output_filename)
            convert_to_webp(input_path, output_path)

 

위 코드는 폴더내에 있는 파일을 처리하는 함수이다. 폴더가 존재하지 않는다면 output 폴더를 생성한다. 

현재 jpg와 jpeg, png 파일만 처리하도록 구현해보겠다. jpg, jpeg, png 외 다른 파일들을 작업을 하지 않도록 하고, 파일이름과 동일한 파일이름의 webp 파일을 생성하도록 해놓았다.

 

전처리가 끝나면 convert_to_webp() 함수로 인풋폴더와 아웃풋 폴더를 인자로 넘겨주자.

 

convert_to_webp() 함수는 아래와 같이 구현하면 된다.

 

def convert_to_webp(input_path, output_path):
  
    try:
        image = Image.open(input_path)
        
        
        if image.mode in ('RGBA', 'LA'):
            background = Image.new('RGB', image.size, (255, 255, 255))
            background.paste(image, mask=image.split()[-1])
            image = background
        
        image.save(output_path, 'WEBP', quality=80)
        
        print(f"변환 성공: {input_path} -> {output_path}")
    
    except Exception as e:
        print(f"변환 실패: {input_path}, 에러: {str(e)}")

 

jpg, jpeg, png 파일을 webp 파일로 변환하는 알고리즘은 따로 설명하지 않겠다. 위의 코드에서 if 문에 해당하는 부분이 바로 변환 하는 방법에 관한 코드다. 그냥 구글에서 검색해봐라. gpt에 물어봐도 잘 알려줄듯하다.

 

이제 함수 구현은 끝났고, 실행 부분만 추가해보자.

input_directory = "./images"  # 변환할 이미지가 있는 폴더
output_directory = "./webp_images"  # 변환된 이미지가 저장될 폴더
 
process_directory(input_directory, output_directory)

 

미리 폴더를 만들어 놓고, 폴더 안에 이미지 파일 하나를 넣어보자.

webp 변환

 

요즘 귀차니즘에 빠져서 위 사지처럼 그냥 동그라미로 표현했으니 이해 바란다.

아무튼 저허게 두개 만들자. 그리고 변환하고 싶은 이미지를 images 폴더에 넣어두자

 

그냥 아무 사진이나 넣어두고, 우클릭하여 속성을 보자.

jpg 파일이고, 47.78KB 사이즈 이다.

 

이제 코드를 실행해보자.

 

변환 성공이라는 메세지가 나타나고, 폴더와 이미지 이름이 보일 것이다.

 

변환 성공: ./images\tesla.jpg -> ./webp_images\tesla.webp

 

이제 폴더로 돌아가보자.

 

webp_images 폴더에 동일한 이름의 webp 파일이 생성된것을 알 수 있다.

그리고 크기 역시 9.78KB로 확 줄어든것을 알 수 있다.

 

아주 빠르고 쉽게 변환이 가능하다. 이제 웹에서 변환하지 말고, 직접 만들어 써보자.

 

전체 코드는 아래에 올려 두겠으니 다운로드 할 사람은 다운로드 해라.

 

추천은 누르고 다운로드 하자 -_- 

 

webp_convert.py
0.00MB

 

 

다음에는 webp 파일을 jpg나 png로 변환하는 방법을 올리도록 하겠다,.