Python으로 이미지 크기 압축

고품질 이미지는 이미지 전체 메모리 크기를 증가시키는 많은 픽셀로 구성됩니다. 그러나 더 나은 로딩을 위해 이미지를 낮은 품질로 저장하려는 경우에는 이미지 압축을 사용합니다. 이미지 압축은 이미지 품질을 저하시키지 않으면서 이미지 크기를 최소화하는 프로세스입니다.
Python에서 이미지를 압축하기 위해 오픈 소스 타사 라이브러리인 pillow 라이브러리를 사용할 수 있습니다.
이 라이브러리를 사용하려면 먼저 pip install 명령을 사용하여 Python 환경에 설치해야 합니다.

pip install pillow


이 라이브러리를 설치한 후 원하는 이미지 압축을 시작할 수 있습니다.

import PIL
from PIL import Image

#open the image
with  Image.open('original.jpg') as my_image:

    # the original width and height of the image
    image_height = my_image.height
    image_width = my_image.width

    print("The original size of Image is: ", round(len(my_image.fp.read())/1024,2), "KB")

    #compressed the image
    my_image = my_image.resize((image_width,image_height),PIL.Image.NEAREST)

    #save the image
    my_image.save('compressed.jpg')

    #open the compressed image
    with Image.open('compressed.jpg') as compresed_image:
        print("The size of compressed image is: ", round(len(compresed_image.fp.read())/1024,2), "KB")



산출

The original size of Image is:  1953.24 KB
The size of compressed image is:  1547.01 KB



코드 깨기
  • 먼저 Image.open() 메서드를 사용하여 압축하려는 원본 이미지를 로드합니다.
  • 너비 및 높이 속성을 사용하여 원본 이미지의 너비와 높이를 찾습니다.
  • 크기 조정 방법을 사용하여 이미지 복사본을 압축하고 압축된 이미지의 크기를 원본 이미지와 동일하게 유지하고 PIL.Image.NEAREST 필터를 적용하여 my_image.resize((image_width,image_height),PIL.Image.NEAREST) 문에서 이미지를 압축합니다.
    참고: 크기 조정 방법에 사용할 수 있는 여러 압축 필터가 있으며 모든 필터를 확인할 수 있습니다here.
  • 마지막으로 save() 메서드를 사용하여 압축된 이미지를 저장합니다.

  • Note: I used the

    print("The original size of Image is: ", round(len(my_image.fp.read())/1024,2), "KB")
    print("The size of compressed image is: ", round(len(compresed_image.fp.read())/1024,2), "KB")
    

    statements to show the difference between the size of the original image and compressed image.


    크기 조정



    위의 코드 스니펫에서는 압축된 이미지의 크기를 원본 이미지와 동일하게 유지하므로 크기 차이가 크지 않습니다. 압축된 이미지의 특정 너비와 높이를 지정하여 원본 이미지의 치수 크기를 조정할 수도 있습니다.

    from turtle import width
    import PIL
    from PIL import Image
    
    #open the image
    with  Image.open('original.jpg') as my_image:
    
        #new widht and height in px
        width = 400
        height = 700
    
        print("The original size of Image is: ", round(len(my_image.fp.read())/1024,2), "KB")
    
        #compressed the image
        my_image = my_image.resize((width,height),PIL.Image.NEAREST)
    
        #save the image
        my_image.save('compressedResized.jpg')
    
        #open the compressed image
        with Image.open('compressedResized.jpg') as compresed_image:
            print("The size of compressed image is: ", round(len(compresed_image.fp.read())/1024,2), "KB")
    


    산출

    The original size of Image is:  1953.24 KB
    The size of compressed image is:  56.89 KB
    




    웹에서 다운로드하여 이미지 압축



    웹에서 이미지를 다운로드하고 Python 필로우 라이브러리를 사용하여 압축할 수도 있습니다.
    웹에서 이미지를 다운로드하려면 먼저 Python 요청 라이브러리를 설치해야 합니다.

    pip install requests
    



    import PIL
    from PIL import Image
    import requests
    
    img_url = "https://images.pexels.com/photos/60597/dahlia-red-blossom-bloom-60597.jpeg"
    
    response = requests.get(img_url)
    
    
    #download image 
    with open("downloaded.jpg", 'wb') as save_image:
        save_image.write(response.content)
    
    #open the image
    with  Image.open('downloaded.jpg') as my_image:
    
        # the original width and height of the image
        image_height = my_image.height
        image_width = my_image.width
    
        print("The original size of Image is: ", round(len(my_image.fp.read())/1024,2), "KB")
    
        #compressed the image
        my_image = my_image.resize((image_width,image_height),PIL.Image.NEAREST)
    
        #save the image
        my_image.save('compressed.jpg')
    
        #open the compressed image
        with Image.open('compressed.jpg') as compresed_image:
            print("The size of compressed image is: ", round(len(compresed_image.fp.read())/1024,2), "KB")
    


    산출

    The original size of Image is:  706.43 KB
    The size of compressed image is:  401.19 KB
    




    Django에서 업로드된 이미지를 압축합니다.



    베개가 있는 Python의 이 압축 기능은 사용자가 고품질 이미지를 업로드하고 압축하려는 경우 Django에서 매우 편리합니다.

    class UserProfile(models.Model):
        profile_picture = models.ImageField(upload_to='profile_pictures', blank=True, verbose_name='Profile Picture')
    
    def save(self, * args, **kwargs):
            super().save( * args, **kwargs)
            if self.profile_picture:
                img= Image.open(self.profile_picture.path)
    
                if img.height>1000 or img.width >1000:
                    output_size= (500,500)
                    img.resize((output_size), PIL.Image.NEAREST)
                    img.save(self.profile_picture.path)
    

    좋은 웹페이지 즐겨찾기