WebP to JPG Конвертор на языке Python

WebP to JPG Конвертор на языке Python

В предыдущей статье блога я представил вам полноценное бесплатное приложение для конвертации webp файлов, написанное на Delphi. Сегодня я расскажу как написать конвертор WebP 2 Jpeg на популярном языке Python.

Что такое WebP?

WebP — это новый формат сжатия изображений, представленный в Google в 2010 году. Формат поддерживает анимацию и прозрачность с альфа — каналом. По утверждению разработчиков, формат WebP обеспечивает лучшее качество изображения чем популярный JPEG при одинаковой степени сжатия. О ценности формата WebP существуют разные мнения. основная проблема заключается в низкой поддержкой формата разработчиками популярного ПО. Например Adobe добавила поддержку WebP в свой Photoshop только в феврале 2022 года. Популярный просмотрщик графики от FastStone до сих пор не видит этот формат. Также существует критика ранних версий этого формата за ухудшение качества изображений в результате размытия. В связи с этим я написал свое небольшое и удобное приложение для конвертации, которое вы можете скачать здесь. Это приложение полностью самодостаточно и не требует наличия на компьютере ничего кроме Windows).

Конвертация WebP на Python

В этой статье я расскажу как написать конвертор файлов WebP в формат Jpeg на языке Python. Вы сможете использовать эти конверторы как есть, или использовать данный код в своих собственных Python скриптах.

Установка Python

Первое что вам необходимо — это установить интерпретатор Python. лучше устанавливать Python именно с официального сайта, а не из магазина Майкрософт.

Заходим на сайт https://www.python.org/downloads/ и скачиваем установщик для вашей операционной системы.

Запускаем установщик. В окне установщика необходимо ОБЯЗАТЕЛЬНО включить галочку «Add Python XXX to path».

WebP to JPG Конвертор на языке Python

Если вы забудете это сделать, то в последствии не сможете запускать Python из консоли и устанавливать дополнительные пакеты и библиотеки. Безусловно, никто не мешает вам добавить путь к Python в переменные окружения Windows вручную. Однако, зачем нам делать лишние движения, если все можно сделать автоматически?

После завершения установки нажимаем сочетание клавиш Win+X и запускаем Windows Power Shell (или просто командную строку, нажав Win+R и введя CMD)
Откроется консоль Windows. Напечатаете там команду python (python3 если у вас MAC) и нажмите Enter. Если Python установился правильно. вы увидите вот такое сообщение с версией Python.

WebP to JPG Конвертор на языке Python

В данном случае видим что у меня на компьютере установлен Python версии 3.12.1

Установка библиотеки PIL для манипуляции с графикой

Для того чтобы ваш Python мог работать с графикой, необходимо установить дополнительную библиотеку. Снова нажмите Win+X и выберите PowerShell (Admin)

В терминале напечатайте команду pip install Pillow

WebP to JPG Конвертор на языке Python

У меня библиотека PIL уже установлена поэтому на скриншоте вы видите сообщение о том, что она установлена и путь к библиотеке. Если у вас не была установлена эта библиотека ранее, то менеджер пакетов Python PIP скачает и установит ее из своего репозитория.

Кроме того, для второго примера нам понадобится библиотека TK. Обычно она уже идет вместе с последними версиями Python, но для верности вы можете ввести в консоли pip install TK

WebP to JPG Конвертор на языке Python

Текстовый редактор для написания кода Python

Теоретически, Python код можно писать в любом текстовом редакторе, хоть в блокноте Windows. Однако лучше использовать для этого специализированные текстовые редакторы для программистов. Для написания этих примеров я использовал редактор VSCode от Microsoft. Вы можете использовать то, что вам нравится, например популярную оболочку PyCharm.

WebP to Jpeg конвертор, версия 1

Откройте редактор кода, создайте пустой файл и сохраните его в отдельной папке с расширением *.py

Пусть это будет файл с именем webp2jpeg.py

Наберите в редакторе следующий текст (Если вам лень, просто скопируйте ено отсюда):

from PIL import Image
import os

def convert_webp_to_jpeg(input_path, output_path):
    try:
        # Open the .webp image
        with Image.open(input_path) as img:
            # Save the image in JPEG format
            img.convert("RGB").save(output_path, "JPEG")
        print(f"Conversion successful: {input_path} -> {output_path}")
    except Exception as e:
        print(f"Conversion failed: {e}")

def batch_convert_webp_to_jpeg(input_folder):
    # Create an output folder if it doesn't exist
    output_folder = os.path.join(input_folder, "jpeg_output")
    os.makedirs(output_folder, exist_ok=True)

    # Iterate through all files in the input folder
    for filename in os.listdir(input_folder):
        if filename.lower().endswith(".webp"):
            webp_path = os.path.join(input_folder, filename)
            jpeg_filename = os.path.splitext(filename)[0] + ".jpeg"
            jpeg_path = os.path.join(output_folder, jpeg_filename)

            convert_webp_to_jpeg(webp_path, jpeg_path)

if __name__ == "__main__":
    # Prompt the user for the input folder
    input_folder = input("Enter the folder containing WEBP files: ").strip()

    # Check if the input folder exists
    if os.path.exists(input_folder):
        batch_convert_webp_to_jpeg(input_folder)
    else:
        print(f"Error: The input folder '{input_folder}' does not exist.")

Сохраните файл, и запустите его, дважды кликнув на нем мышкой в проводнике Windows. Программа попросит вас ввести путь к папке, в которой у вас лежат файлы изображений в формате WtbP.

WebP to JPG Конвертор на языке Python

Напечатайте путь или просто скопируйте его из адресной строки проводника Windows. После этого нажмите Enter.

В случае успешной конвертации в указанной папке будет создана папка jpeg_output, в которую скрипт поместит Jpeg файлы.

WebP to Jpeg конвертор, версия 2

Итак, наш скрипт отлично работает. Однако, на мой взгляд не очень удобно искать папку в проводнике, копировать путь к папке и вставлять в запрос нашего скрипта.

давайте модифицируем программу так, чтобы при ее запуске открывался стандартный диалог выбора файлов/папок Windows. Это намного улучшит удобство использования скрипта. Для открытия диалога Windows будем использовать библиотеку TK. Итак, вторая версия нашего кода:

from PIL import Image
import os
from tkinter import Tk, filedialog

def convert_webp_to_jpeg(input_path, output_path):
    try:
        # Open the .webp image
        with Image.open(input_path) as img:
            # Save the image in JPEG format
            img.convert("RGB").save(output_path, "JPEG")
        print(f"Conversion successful: {input_path} -> {output_path}")
    except Exception as e:
        print(f"Conversion failed: {e}")

def batch_convert_webp_to_jpeg(input_folder):
    # Create an output folder if it doesn't exist
    output_folder = os.path.join(input_folder, "jpeg_output")
    os.makedirs(output_folder, exist_ok=True)

    # Iterate through all files in the input folder
    for filename in os.listdir(input_folder):
        if filename.lower().endswith(".webp"):
            webp_path = os.path.join(input_folder, filename)
            jpeg_filename = os.path.splitext(filename)[0] + ".jpeg"
            jpeg_path = os.path.join(output_folder, jpeg_filename)

            convert_webp_to_jpeg(webp_path, jpeg_path)

def get_folder():
    root = Tk()
    root.withdraw()  # Hide the main window

    folder_selected = filedialog.askdirectory(title="Select Folder with WEBP Files")

    root.destroy()  # Close the main window

    return folder_selected

if __name__ == "__main__":
    # Prompt the user to select a folder
    input_folder = get_folder()

    # Check if the input folder exists
    if input_folder:
        batch_convert_webp_to_jpeg(input_folder)
    else:
        print("Error: No folder selected.")

Повторяем действия как в первой версии. Создаем новый файл .py, вставляем туда текст программы и сохраняем файл в отдельную папку. Запускаем скрипт, дважды кликая на нем мышкой. Если вы всё сделали правильно, появится диалог файлов Windows.

WebP to JPG Конвертор на языке Python

Выберите папку, у которой лежат файлы WebP и нажмите кнопку Select Folder. Произойдет конвертация файлов как и в первой версии.

Подробный разбор кода программы

Ниже я привожу части кода скрипта и объясняю что делает этот код:

  1. Подключение необходимых библиотек
from PIL import Image
import os
from tkinter import Tk, filedialog

PIL (библиотека изображений Python). Модуль изображений из библиотеки PIL используется для открытия, управления и сохранения изображений.

os: модуль os предоставляет способ взаимодействия с операционной системой, позволяя выполнять такие операции, как манипулирование файлами и каталогами.

tkinter: библиотека tkinter используется для создания простого графического интерфейса для выбора папки.

2. Функция конвертации изображения

def convert_webp_to_jpeg(input_path, output_path):
    try:
        with Image.open(input_path) as img:
            img.convert("RGB").save(output_path, "JPEG")
        print(f"Conversion successful: {input_path} -> {output_path}")
    except Exception as e:
        print(f"Conversion failed: {e}")

Эта функция (convert_webp_to_jpeg) отвечает за преобразование одного изображения .webp в .jpeg. Он использует метод Image.open() из библиотеки PIL, чтобы открыть изображение .webp, затем преобразует его в цветовой режим RGB с помощью Convert(«RGB») и сохраняет его как файл .jpeg с помощью save(output_path, «JPEG «). Любые исключения, возникающие во время процесса, перехватываются и распечатываются.

3. Функция пакетного преобразования:

def batch_convert_webp_to_jpeg(input_folder):
    output_folder = os.path.join(input_folder, "jpeg_output")
    os.makedirs(output_folder, exist_ok=True)

    for filename in os.listdir(input_folder):
        if filename.lower().endswith(".webp"):
            webp_path = os.path.join(input_folder, filename)
            jpeg_filename = os.path.splitext(filename)[0] + ".jpeg"
            jpeg_path = os.path.join(output_folder, jpeg_filename)

Эта функция (batch_convert_webp_to_jpeg) выполняет пакетное преобразование всех файлов .webp в указанной папке. Она создает выходную папку («jpeg_output») внутри входной папки, если она не существует. Затем она перебирает все файлы во входной папке, идентифицирует файлы .webp и вызывает функцию Convert_webp_to_jpeg для каждого из них.

4. Функция выбора исходной папки

def get_folder():
    root = Tk()
    root.withdraw()

    folder_selected = filedialog.askdirectory(title="Select Folder with WEBP Files")

    root.destroy()

    return folder_selected

Эта функция (get_folder) использует tkinter для создания диалогового окна выбора папки. Он открывает скрытое главное окно, предлагает пользователю выбрать папку, извлекает выбранную папку, а затем уничтожает главное окно.

5. Основной исполнительный блок:

if __name__ == "__main__":
    input_folder = get_folder()

    if input_folder:
        batch_convert_webp_to_jpeg(input_folder)
    else:
        print("Error: No folder selected.")

В основном блоке вызывается функция get_folder, предлагающая пользователю выбрать папку. Если выбрана папка, функция patch_convert_webp_to_jpeg вызывается с выбранным путем к папке. Если папка не выбрана, выводится сообщение об ошибке.

На этом всё, друзья. Пишите комментарии к статье.
Musbench.com, 24 zydfhz 2024 года


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *