Найти тему

Python. Простой конвертер HEIC в PNG или JPG.

Доброго вечера, ночи или дня. Бекап это всегда хорошо, тем более если это бекап кучи фотографий с телефона. Да, эти фотографии сохраняются в облаке, но намного спокойнее, если они ещё лежат и на компе. Вот возникла такая необходимость и у меня. Но мало сохранить, было бы не плохо иногда их просматривать, а они с расширением HEIC и просмоторщик по умолчанию ни в винде, ни в убунте их не открывает.

В интернете полно онлайн конвертеров, но конвертировать более двухсот файлов по одному - не малый труд, да и добровольно загружать свои фотографии кому-то не очень хорошая идея))

Попробуем обойтись своими силами)) Гугл мне дал вроде готовое решение, но на выходе я получил мешанину из пикселей)) Пришлось немного вникнуть и решение как всегда оказалось простым...

Нам понадобиться библиотека для работы с изображениями PILLOW и аддон к ней для работы с изображениями в HEIF формате.

Устанавливаем:

Если конвертировать по одному файлику, то строчек совсем немного, необходимо открыть файл и сохранить в нужном формате.

-2

Описываю по номеру строки:

1, 2 - импортируем установленные библиотеки.

5 - в общем как и написано, регистрируем "открывашку", которая позволяет pillow открывать файлы HEIC.

6 - ввод из консоли имени файла для конвертации без его расширения.

7 - открытие файла.

8 - сохранение файла с тем же именем в формате PNG.

9 - сохранение файла с тем же именем в формате JPG, тут выставляются параметры качество и оптимизация.

Вот в общем и всё. В зависимости от необходимого формата строчку 8 или 9 можно закомментировать.

Но мне нужно конвертировать пачку файлов, поэтому придётся немного доработать скрипт. Для этого используем встроенную библиотеку OS.

-3

Будем считать, что папка "HEIC" у нас присутствует там где находится скрипт и в ней содержаться только файлы для конвертации, не будем усложнять)) Результат будет в папках "JPG" и "PND".

3 - импортируем модуль os.

5 - получаем список файлов для конвертации из папки "HEIC".

6 - 9 - проверяем есть ли папки "JPG" и "PND" и, если их нет - создаём.

Чтобы понять, что скрипт не завис, создаём простенькую визуализацию прогресса.

10 - получаем количество файлов для конвертации.

11 - объявляем начальный прогресс.

12 - для каждого файла из списка запускаем конвертацию.

13 - открываем...

14 - т.к имя файла у нас строка, разбиваем его на две части, разделённых точкой, чтобы получить только имя без расширения.

15 - сохранение файла в формате PNG.

16 - сохранение файла в формате JPG.

18 - плюс один обработанный файл.

19 - пишем в консоль сколько обработано из общего количества.

Теперь запустив скрипт, мы без лишних движений получаем все файлы в нужном формате. Но при конвертации на одном файле у меня вылетела ошибка. Как оказалось - файл битый, скорее всего при копировании с телефона что-то пошло не так. Можно или скопировать заново, или, если возможности скопировать нет, попробовать сконвертировать то что есть)) Для этого нужно добавить ещё один импорт из pillow - "ImageFile" и одну строчку.

-4

Изменения в строках 1 и 4.

Теперь всё работает даже с файлами скопированными не до конца)) Далее, например, с помощью pyinstaller можно упаковать скрипт в самораспаковывающийся архив для запуска на любом компе без установки интерпретатора Python и необходимых библиотек.

Аналогично можно конвертировать и другие форматы изображений. Спасибо, что дочитали)) Надеюсь эта статейка кому-то поможет)) Комментируйте, задавайте ваши ответы))