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

Картинки в 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

Публикации

Изменить настройки темы

Истории

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

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн