Оптимизация изображений с помощью Pillow: методы и примеры кода

Чтобы оптимизировать изображения с помощью библиотеки Pillow в Python, вы можете использовать различные методы. Эти методы могут помочь уменьшить размер файлов изображений, сократить время загрузки и повысить общую производительность веб-сайта. Вот некоторые часто используемые методы, а также примеры кода:

  1. Изменение размера изображений.
    Изменение размера изображений может значительно уменьшить размер их файлов. Вы можете указать нужные размеры или коэффициент масштабирования для изменения размера изображения. Вот пример:

    from PIL import Image
    def resize_image(input_path, output_path, new_size):
       image = Image.open(input_path)
       image.thumbnail(new_size)
       image.save(output_path)
    # Example usage:
    resize_image('input.jpg', 'output.jpg', (800, 600))
  2. Сжатие изображений.
    Методы сжатия изображений позволяют уменьшить размер файла, сохраняя при этом приемлемое качество. Pillow предоставляет такие параметры, как сжатие JPEG и PNG. Вот пример:

    from PIL import Image
    def compress_image(input_path, output_path, quality=85):
       image = Image.open(input_path)
       image.save(output_path, optimize=True, quality=quality)
    # Example usage:
    compress_image('input.jpg', 'output.jpg', quality=75)
  3. Преобразование в WebP.
    WebP – это современный формат изображений, обеспечивающий превосходное сжатие. Вы можете использовать Pillow для преобразования изображений в формат WebP. Вот пример:

    from PIL import Image
    def convert_to_webp(input_path, output_path):
       image = Image.open(input_path)
       image.save(output_path, 'WebP', lossless=True)
    # Example usage:
    convert_to_webp('input.jpg', 'output.webp')
  4. Удаление метаданных.
    Файлы изображений часто содержат метаданные, которые не важны для отображения. Удаление метаданных может уменьшить размер файла. Вот пример:

    from PIL import Image
    def strip_metadata(input_path, output_path):
       image = Image.open(input_path)
       data = list(image.getdata())
       image_without_metadata = Image.new(image.mode, image.size)
       image_without_metadata.putdata(data)
       image_without_metadata.save(output_path)
    # Example usage:
    strip_metadata('input.jpg', 'output.jpg')