@aqau123

Как уменьшить картинку без потери качества в питоне?

Есть у меня скрипт, сохраняет скрины постов за прошедшую неделю, скрины нужно эти в ворд запихнуть => для начала нужно их уменьшить.

Есть такой код:
from PIL import Image
from concurrent.futures import ThreadPoolExecutor
from scripts import config
import os

def imageResize(imagePath: str):
    image = Image.open(imagePath)

    newImagePath = os.path.join(os.getcwd(), 'debugScreens', imagePath.split('\\')[-1])

    width, height = image.size

    if height < 400:
        image.save(newImagePath)
        return
    
    desiredHeight = 470

    newWidth = round((desiredHeight * width) / height)

    resizedImage = image.resize((newWidth, desiredHeight))

    resizedImage.save(newImagePath)

    print(f'Saved image: {newImagePath}')

    return

paths = [os.path.join(config.SCREENSHOTS, imgName) for imgName in os.listdir(config.SCREENSHOTS)]

with ThreadPoolExecutor(max_workers=6) as pool:
    pool.map(imageResize, paths)

Еще пробовал другие варианты, но суть одна, изображение на выходе теряет качество.
Картинка на входе
6212ca81a7d00917921532.jpeg
На выходе
6212ca8d977d0275571402.jpeg
Как можно сделать так, чтоб качество терялось минимально.
  • Вопрос задан
  • 402 просмотра
Пригласить эксперта
Ответы на вопрос 1
@rPman
image.save(filename, 'JPEG', quality=90)
где 90 - качество от 0 до 100, по умолчанию 75

Если изображение состоит из большого количества пустого пространства, мало плавных градиентных переходов и вообще мало фотографического контента, но много текста и резких переходов цветов (нужны четкие границы) лучше выбирать формат PNG (в этом формате можно и фотографии хранить но не так эффективно)

приведенные примеры лучше хранить в png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы