Доброго вечера, ночи или дня. Бекап это всегда хорошо, тем более если это бекап кучи фотографий с телефона. Да, эти фотографии сохраняются в облаке, но намного спокойнее, если они ещё лежат и на компе. Вот возникла такая необходимость и у меня. Но мало сохранить, было бы не плохо иногда их просматривать, а они с расширением HEIC и просмоторщик по умолчанию ни в винде, ни в убунте их не открывает.
В интернете полно онлайн конвертеров, но конвертировать более двухсот файлов по одному - не малый труд, да и добровольно загружать свои фотографии кому-то не очень хорошая идея))
Попробуем обойтись своими силами)) Гугл мне дал вроде готовое решение, но на выходе я получил мешанину из пикселей)) Пришлось немного вникнуть и решение как всегда оказалось простым...
Нам понадобиться библиотека для работы с изображениями PILLOW и аддон к ней для работы с изображениями в HEIF формате.
Устанавливаем:
Если конвертировать по одному файлику, то строчек совсем немного, необходимо открыть файл и сохранить в нужном формате.
Описываю по номеру строки:
1, 2 - импортируем установленные библиотеки.
5 - в общем как и написано, регистрируем "открывашку", которая позволяет pillow открывать файлы HEIC.
6 - ввод из консоли имени файла для конвертации без его расширения.
7 - открытие файла.
8 - сохранение файла с тем же именем в формате PNG.
9 - сохранение файла с тем же именем в формате JPG, тут выставляются параметры качество и оптимизация.
Вот в общем и всё. В зависимости от необходимого формата строчку 8 или 9 можно закомментировать.
Но мне нужно конвертировать пачку файлов, поэтому придётся немного доработать скрипт. Для этого используем встроенную библиотеку OS.
Будем считать, что папка "HEIC" у нас присутствует там где находится скрипт и в ней содержаться только файлы для конвертации, не будем усложнять)) Результат будет в папках "JPG" и "PND".
3 - импортируем модуль os.
5 - получаем список файлов для конвертации из папки "HEIC".
6 - 9 - проверяем есть ли папки "JPG" и "PND" и, если их нет - создаём.
Чтобы понять, что скрипт не завис, создаём простенькую визуализацию прогресса.
10 - получаем количество файлов для конвертации.
11 - объявляем начальный прогресс.
12 - для каждого файла из списка запускаем конвертацию.
13 - открываем...
14 - т.к имя файла у нас строка, разбиваем его на две части, разделённых точкой, чтобы получить только имя без расширения.
15 - сохранение файла в формате PNG.
16 - сохранение файла в формате JPG.
18 - плюс один обработанный файл.
19 - пишем в консоль сколько обработано из общего количества.
Теперь запустив скрипт, мы без лишних движений получаем все файлы в нужном формате. Но при конвертации на одном файле у меня вылетела ошибка. Как оказалось - файл битый, скорее всего при копировании с телефона что-то пошло не так. Можно или скопировать заново, или, если возможности скопировать нет, попробовать сконвертировать то что есть)) Для этого нужно добавить ещё один импорт из pillow - "ImageFile" и одну строчку.
Изменения в строках 1 и 4.
Теперь всё работает даже с файлами скопированными не до конца)) Далее, например, с помощью pyinstaller можно упаковать скрипт в самораспаковывающийся архив для запуска на любом компе без установки интерпретатора Python и необходимых библиотек.
Аналогично можно конвертировать и другие форматы изображений. Спасибо, что дочитали)) Надеюсь эта статейка кому-то поможет)) Комментируйте, задавайте ваши ответы))