LibreOffice: уменьшение размера документа с помощью пакетной обработки изображений

Недавно мне в руки попал .odt документ весом 120 мб. Я быстро догадался в чем причина такого ожирения, документ содержал большое количество фотографий в высоком разрешении (больше 80 штук), каждая весом около 2 мб. С размером надо было что-то делать, но не вариант по отдельности выуживать все изображения, менять их разрешение и снова вставлять в документ. На ум сразу пришло словосочетание «пакетная обработка».
Пакетная обработка изображений — одновременное автоматическое выполнение операций над множеством графических файлов.
У меня уже был опыт пакетной обработки изображений программой ImageMagick. Но сейчас передо мной стояло две проблемы:
  • отсутствие исходных изображений
  • все изображения в документе были разной ориентации

Первая проблема решалась очень просто, .odf документы это xml файлы запакованные в zip архив. И все изображения, вставленные в документ, хранятся в нем. Поэтому я распаковал документ и обнаружил там папку Pictures. В ней и лежали все изображения, оставалось их только обработать. Для решения второй проблемы я написал небольшой скрипт под названием magick.py (скачать). На основе данных о размере ширины и высоты изображения он определяет его ориентацию (портретная или ландшафтная), а затем уменьшает либо высоту, либо ширину. Теперь подробнее о деталях

Распаковка odt файла

Не все архиваторы понимают расширение .odt, поэтому для распаковки текстового документа нужно переименовать его и вместо .odt написать .zip. LibreOffice перестанет открывать такой документ, но это временно. Далее просто распаковываем этот zip архив штатным архиватором.
Офисные пакеты: окно файлового менеджераВ качестве примера я использовал документ меньшего размера не 120 мб, а всего каких-то 75. На всякий случай сделал копию документа example.odt, и сменил ему расширение на .zip. Получился архив copy_example.zip, который я и распаковал.
Офисные пакеты: содержание документа в .zip Офисные пакеты: изображения из документа в файловом менеджере
Вот внутренности документа и заветная папка Pictures. В ней лежат все изображения, вставленные в файл. Ничего лишнего в ней больше нет — идеальный вариант для пакетной обработки.

Несколько слов о вставке изображений в LibreOffice

После вставки изображения в LibreOffice исходное изображение копируется в папку Pictures. В самом документе можно уменьшить изображение, обрезать или выполнить другие действия. Но при этом исходное изображение в папке Pictures не изменяется. В качестве примера я обрежу в руководстве скриншот терминала:
Офисные пакеты: вставка изображения в LibreOffice Офисные пакеты: кадрирование изображений в LibreOffice Офисные пакеты: вставка кадрированного изображения в LibreOffice
Исходное изображение в папке Pictures осталось прежним:
Офисные пакеты: терминал Ubuntu
Можно смело изменять разрешение изображений, не опасаясь фатальных изменений в структуре самого документа. Конкретно в моем случае после преобразования изображений вообще ничего не поехало.

Пакетная обработка изображений в папке Pictures

Теперь для обработки изображений скопируем скрипт в папку Pictures. Я не буду останавливаться на настройках скрипта и его использовании (все описано в его руководстве). Просто покажу конечный результат. Напоминаю, что скрипт создает в папке с изображениями папку magick_out, в которой сохраняет обработанные изображения. Не забудьте скопировать с заменой обработанные изображения в папку Pictures и удалить папку magick_out. Офисные пакеты: изображения из документа .odt
Теперь все изображения имеют приемлемый размер и вес. Можно приступать к запаковке архива.

Запаковка архива

Перед тем, как запаковать архив убедитесь, что вы заменили старые изображения на обработанные и удалили папку magick_out из Pictures. Далее нужно выделить все файлы документа и запаковать их в zip архив.
Офисные пакеты: создание архива Офисные пакеты: окно параметров архивации
После запаковки меняем обратно расширение .zip на .odt.
Офисные пакеты: .odt со сжатыми изображениями
Все, LibreOffice снова сможет открыть файл, который теперь стал гораздо легче. Конечно при желании можно ужать документ и до меньших размеров. Я уменьшал фотографии до 1000 пикселей и с максимальным качеством. Тут пусть каждый сам ищет для себя баланс.

5 комментариев

Satchitananda
Очень полезная статья! Спасибо
deemonizer
Чужие документы напоминают мне табакерку с чертиком, никогда не знаешь чего ожидать
VladimirSolomko
Спасибо, искал ответ на вопрос как обрезать рисунок в документе. Кадрирование «по-ЛиберОфисовски» — нужно точно знать сколько миллиметров у меня лишнего рисунка — линейку к монитору или ± полведра на миниатюрке?
deemonizer
Да, пока стандартное кадрирование не очень продумано. С другой стороны, LO это офисный пакет, а не графический редактор. Предполагается, что пользователь заранее готовит все материалы. Вдруг пользователь решит вставить видео в документ, не встраивать же еще и видеоредактор в программу.

Но способ с распаковкой файла тоже работает :) Постоянно им пользуюсь.
VladimirSolomko
Естественно, LO — текстовый редактор (процессор) и ожидать от него возможностей фото-видео-редактора, конечно, не стоит. С другой стороны, очень сложно «присадить» на LO среднестатистического офисного пользователя с известными привычками подгонять свои картинки в текстовом редакторе :)

Оставить комментарий