Публикация Школы траблшутеров

Избавлению от шлама поспособствует программа

Время чтения: 4 мин 45 сек
29 мая 2025 г. Просмотров: 87

Программирование, PythonОлег Брагинский, Рамиль Мамедов, Валерий Хлебнов

Оптимизация размеров файлов очередной раз становится во главу угла производительного документооборота. Основатель «Школы траблшутеров» Олег Брагинский и ученики Валерий Хлебнов и Рамиль Мамедов опишут трудности похудения в динамичном компьютерном мире.

Современные пакеты офисных программ становятся универсальными монструозными комбайнами. Написанный текст сопровождается графическими материалами запредельного качества для восприятия невооружённым глазом. Фотоотчёты редактируются неприлично долго.

Олег сформулировал задачу: «Книги Школы Траблшутеров, написанные в MS Word тяжелы для конвертирования и пересылки, неповоротливы для редактирования и добавления новых мыслей. Необходимо посадить текстовые документы на цифровую диету для удобной работы с ноутбука».

По структуре файлов знаем, что документы с расширением «.docx» на самом деле являются ZIP‑архивом. Нацелились на оптимизацию картинок и фотографий, хранящихся внутри. Рисунки, скачанные с интернета, имеют неоптимальный формат с дополнительной незримой информацией.

При вставке фотографий с завершённых проектов удивились разрешениям «4K» и «8K». Смартфоны помимо снимка хранят исчерпывающие exif‑данные. Такое качество необходимо только при демонстрации с профессиональных проекторов и не заметно при чтении с планшета.

Искоренять сложности решили с помощью Python. Начального навыка программирования оказалось достаточно для решения нетривиальной задачи. Перед кодированием вскрыли книги вручную – подсмотреть структуру файла. Понимание атомов спрогнозирует последующие шаги.

Оказалось, что файлы MS Word имеют вполне понятную структуру:

  • разметка текстового документа
  • библиотеки стилей
  • хранилище медиа.

Библиотекой «zipfile» достаём папку с изображениями для последующих манипуляций. Имена файлов идут последовательно по мере добавления в книги, именуются «Image1», «Image2» и так далее. Изображения форматов разнится: «*.jpeg», «*.jpg», «*.gif», «*.bin», «*.svg», «*.wdp», «*.emf».

Для обработки выбрали библиотеку Pillow как самую понятную и распространённую. Первые попытки перевести все картинки в наиболее плотный формат «*.webp», разработанный Google, не увенчались успехом. При сохранении файла MS Word конвертирует их в понятный для него «*.png».

Наиболее приемлемый уровень сжатия по весу изображений оказался «*.jpg». «*.gif» демонстрирует наибольшую стройность за счёт ограниченной палитры цветов в 256 единиц. Фотографии создают ощущение сломанного дисплея и шлют «Привет!» из начала миллениума.

Pillow 10.4.0 не умеет работать с прозрачностью. При удалении альфа-слоя пустота закрашивается чёрным цветом. Для заливки белым выкрутились дублированием изображения с последующим использованием в качестве подложки. Прозрачность редко нужна в документах, имеет большой вес.

После конвертации картинок и запаковки MS Word ругался на битую структуру. Замена расширений изображений сбивает с толку внутреннюю разметку. Ответственный находится по пути: «\word\_rels\document.xml.rels». Заменяем старые форматы на изменённые с сохранением.

Распотрошённый и причёсанный комплект документов пытаемся собрать в первозданный ZIP‑архив. При сохранении добавим якорь «_compressed» в имя файла для быстрого распознавания новоиспечённых файлов. Переименование «*.zip» в «*.docx» завершает работу.

После тестирования скрипта дописываем обвязку для работы со всеми файлами, имеющими расширение «*.docx», расположенными в текущей директории. Позволит не заморачиваться с прописыванием путей расположения целевых документов. Финалим скрипт в exe‑программу.

Под каждый проект, планируемый для компиляции, необходимо создавать рабочее окружение. В противном случае в программу упакуются все присутствующие библиотеки на рабочей станции, а не необходимые. Склеиваем всё в единый файл, добавляем логотип, рисуем псевдоинтерфейс.

После отработки написанная программы демонстрирует сжатие файлов MS Word до 60%. Редактирование книг стало более комфортным. Удешевилось хранение на облачных хранилищах. Упростилась пересылка по электронной почте. Экспорт в PDF-формат перестал утомлять.

Итоговый вес программы со всеми библиотеками получился менее 10 мегабайт, что считается неплохим результатом для сегодняшнего дня и абсолютно неприемлемым для гуру, познавших Assembler. Экономию по времени юзания чужих библиотек ставим в противовес функционалу.

С приходом искусственного интеллекта в программирование не можем опираться на константы. ИИ по своему усмотрению оптимизирует алгоритмы и выдаёт неожиданные результаты. Уже через короткое время увидим, как изменятся структуры файлов и придётся начинать всё сначала…