Как стать автором
Обновить

Картинки в doc-файле: снижение веса хирургическим путём

Время на прочтение 2 мин
Количество просмотров 46K
Жил-был на свете один перевод (как процесс, а не как результат). Существовал он таким образом: из pdf-ки с оригинальным текстом вырезались кусочки, вставлялись прямо в Word и снизу посредством значительных мысленных усилий появлялся русский текст, и, как правило, пара-другая сносок. А если в оригинале были сноски, то в сносках тоже появлялись картинки. Перевод шёл, и файл разрастался — в 16-страничном файле было 51 изображение, и Word стал работать так медленно, что перевод никак не мог стать результатом.
Встроенная функция компрессии изображений почему-то совсем не помогала, поэтому было решено произвести вмешательство хирургическим путём.

Файл выглядит вот так (узкие колонки — не текст, а картинки):


Во внутренности doc-файла залезть тоже можно, но гораздо проще сделать это в .docx. Пересохраняем. Видим, что само по себе пересохранение ничего не дало — как весил файл 12 мегабайт, так и весит.


Как известно, .docx-файл представляет собой zip-архив с особой внутренней структурой — поэтому без всякого труда заглянуть ему в кишки, а там…

в распакованном виде директория word весила бы почти семьсот мегабайт! Неудивительно, что Word отказывается работать…
Конечно, главный виновник — изображения, каждое из которых занимает порядка десяти мегабайт:


Интересно, почему явно растровые изображения Word хранит в EMF — векторном формате? Вероятно, этому есть какое-то глубинное объяснение, которое будет задействовать аргумент о PDF-источнике («ведь PDF — тоже векторный формат!»), но сейчас нас волнует не это. Чтобы не заморчиваться редактированием файла document.xml при изменении формата рисунков, мы ограничимся всего лишь уменьшением их размера. К счастью, IrfanView среди всех прочих полезных функций умеет писать EMF (Photoshop, например, не умеет из коробки). А ещё он может уменьшать изображения пачками — этой функцией мы и воспользуемся. 800 пикселов по длинной стороне вполне достаточно.

(на картинке сверху справа виден фрагмент буквы g — и это ещё уменьшенная по ширине экрана оригинальная версия).

После этого можно запаковать обратно изменённые файлы — весить они будут значительно меньше (в 15 раз):
.

Word совершенно спокойно съел этот файл. Правда, при сохранении обратно в .doc он несколько потолстел, но всё же совсем не настолько:


Итого: файл сжат в 6,5 раз без уменьшения видимого качества (для печати файл не предназначен, но даже и в этом случае выглядел бы он неплохо), процесс перевода пошёл гораздо быстрее (и с меньшим количеством ругательств), а дома стало несколько спокойнее, что, без сомнения, является главным достижением.

UPD:
Обсуждение в комментариях, по какой именно причине Word вставляет рисунки в EMF
Теги:
Хабы:
+23
Комментарии 39
Комментарии Комментарии 39

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн