Павел Кондратович
О точности позиционирования иллюстраций в программах верстки.
Если вы сталкивались с проблемой, что при размещении фотографии в бокс в QuarkXPress (с точно такими же размерами как фотография) между границей бокса и фотографией возникает тонкий просвет или что тонкая рамка в EPS (например, таблицы сделанные в Microsoft Word или Adobe Table и сохраненные как EPS) зарезается боксом в QuarkXPress, причем с разных сторон по разному, или же вы пытаетесь точно совместить в Adobe PageMaker векторное изображение с растром (выверяя их размеры по цифрам в Adobe Illustrator и Adobe Photoshop), а на выводе (в PDF, на RIP, в тираже) обнаруживаете, что как вы не старались все равно есть расхождения, да и вообще при помещении иллюстраций в программы верстки их размеры определяются c погрешностью, то все ниженаписанное вам будет интересно.
Сначала расскажу историю, которая заставила провести данное исследование.
Делается в QuarkXPress газета. Рекламные блоки имеют фиксированные, точные размеры. Соответственно, в QuarkXPress рисуются заданные графические боксы, в которые вставляются рекламные модули целиком сделанные в EPS. Приносимые файлы проверяются в Adobe Illustrator на корректность, в частности, на соответствие заданным размерам. Но на выводе выясняется, что в рекламных модулях с двух сторон зарезаются тоненькие рамочки. Начинаем проверять в чем же дело. EPS имеет точные размеры (рамка меньше точно на свою толщину), бокс в QuarkXPress так же выставлен по цифрам. Понятно, что можно удалить обводку в EPSе и сделать рамку у фрейма в QuarkXPress или просто жать Ctrl+Alt+Shift+F, но стало интересно, что же все-таки происходит.
И так, уже при первом взгляде на вопрос очевидно, что проблема заключается в ошибках округления, но вот где они возникают и можно ли их избежать?
Об этом собственно читайте ниже.
Т.к. природа погрешности для EPS и для TIFF различна, то дальнейшие рассуждения состоят из двух частей.
ЧАСТЬ 1. EPS.
Формат EPS (Encapsulated PostScript) задумывался, как формат для хранения графики описанной на языке PostScript, которую программа верстки может вставить как готовый кусок при печати в файл описания страницы на языке PostScript. Т.е. программе верстки не надо полностью интерпретировать содержание файла в формате EPS, достаточно знать только размеры занимаемые этой иллюстрацией. Плюс для наглядности позиционирования программа верстки может "прочитать" превью (как правило, растровое изображение низкого разрешения), если таковое имеется в файле (что, впрочем, не обязательно).
Из этого следуют два важных вывода:
- Ни когда не надо полностью ориентироваться при размещении в программе верстки на превью.
- Программа верстки при записи PostScript, так же не "смотрит" на превью, она оперирует значением размера иллюстрации прописанных в EPS.
А прописываются они в начале файла EPS DSC-комментарием %%BoundingBox. Если открыть EPS-файл любым текстовым редактором, то, как правило в первой десятке строк обнаружится и строка вида
%%BoundingBox: X1 Y1 X2 Y2
где X1 и Y1 -- числа задающие координаты нижнего левого угла, а X2 и Y2 -- верхнего правого.
Собственно разница X2-Х1 дает информацию о ширине, а Y2-Y1 о высоте иллюстрации для программы верстки.
В качестве единиц измерения используется пункт (причем не англо-американский, равный 0,3514 мм, и не французский, принятый у нас и равный 0,3759 мм, а PostScript-пункт, равный 1/72 дюйма, т.е. 0,3528 мм). А так как в современной допечатной подготовке при определении линейных размеров пользуются, в основном, миллиметрами, то один из источников проблем -- перевод мм в PS-пункты. Но порядок этих ошибок слишком мал, главные проблемы кроются совсем в другом.
Оказывается многие программы округляют значения %%BoundingBox до целого числа пунктов (соответственно, программы подготовки иллюстраций при генерации EPS, а программы верстки при его импортировании). При этом в пределе ошибка может составить 2 пункта (около 0,7 мм)!!! (Соответственно минимальная ошибка равна 0, но для этого необходимо, но не достаточно!, чтобы размеры иллюстрации были равны целому числу PS-пунктов).
Итак, сначала пример.
Рисуем в CorelDRAW 8 прямоугольник (без обводки), например, размером 100х50 мм и экспортируем его в EPS. Вставляем его в QuarkXPress. При импорте обращаем внимание на то, что QuarkXPress определил его размеры как 100,54х50,43 мм (для уже импортированного EPS размеры можно посмотреть через Utilities/Usage/Pictures - More Information).
Теперь делаем второй EPS в CorelDRAW из того же прямоугольника, но в параметрах EPS Export ставим галку на пункте Floating point %%BoundingBox (CorelDRAW 8). Для этого EPS QuarkXPress показывает точные размеры 100х50 мм.
Заглядываем в ЕПСы и в первом видим:
%%BoundingBox: 85 354 369 497,
а во втором
%%BoundingBox: 85.03937 354.33071 368.50394 496.06299.
Обратите внимание, на то что для X1, Y1 округление всегда в меньшую сторону, а X2, Y2 в большую, т.е. размеры ширины и высоты всегда заведомо больше реальных, а разница между реальными и округленными значениями может составить 2 пт. (Скажу сразу, что Adobe Illustrator округляет по такому же принципу).
CorelDRAW EPS и QuarkXPress 4.1
Итак, выводы из вышеприведенного примера.
- QuarkXPress не округляет при импорте значения %%BoundingBox. (Ведет ли себя QuarkXPress 3.32 аналогично 4.1 -- я не в курсе.)
- Если в CorelDRAW явно не указать использование значений %%BoundingBox с плавающей запятой, они будут округлены. Т.е. средство борьбы очень просто, достаточно установить галку в "Floating point %%BoundingBox" при экспорте EPS (CorelDRAW 8).
В CorelDRAW 9 и 10 имеется аналогичная настройка: EPS Export/Advanced/BoundingBox > Floating point numbers
В Adobe Illustrator дела обстоят хуже -- %%BoundingBox всегда имеет целочисленное значение, а точные размеры с плавающей запятой прописываются в %%HiResBoundingBox. Однако, этот параметр не оговаривается спецификацией DSC и, например, QuarkXPress берет размеры только из %%BoundingBox.
С Adobe PageMaker, то же все запущено: даже если размеры заданы точно, он сам их округляет до целого количества пунктов при импорте.
Соответственно возникает вопрос "что делать?"
Adobe Illustrator 7/8 EPS и QuarkXPress 4.1
Для того, что бы точно поставить EPS в QuarkXPress необходимо сделать в Adobe Illustrator так, что бы координаты верхнего левого угла картинки выражались целым значением пунктов (т.е. значения X1, Y2 в %%BoundingBox). Верхнего левого -- потому, что QuarkXPress все позиционирует относительно именно этого угла.
Самый простой способ поместить в Adobe Illustrator верхний левый угол в точку начала отсчета координат. В QuarkXPress вставляем полученный EPS в бокс заданных размеров. Главное теперь не двигать картинку внутри бокса, т.е. например не нажимать Ctrl+Shift+M ("разместить по центру бокса") и не обращать внимание на то, что QuarkXPress сообщает неточные размеры ширины и высоты импортированного EPS (т.к. он показывает размеры округленные до большего целого значения пунктов, то отсюда понятно почему Ctrl+Shift+F не поможет, ведь тогда реальные размеры станут меньше и на выводе появится белый зазор). Т.е. вас не должно сбивать с толку расположение превью.
Adobe Illustrator 7/8 EPS и Adobe PageMaker 6.52
В Adobe Illustrator делаем EPS так же как и для QuarkXPress. За исключением того, что в PageMaker можно позиционировать относительно любого угла, поэтому точку отсчета в Illustrator в принципе можно установить в любой угол, а в PageMaker ровнять уже по этому углу. Теперь вставляем полученный EPS в PageMaker. Если хочется чтобы EPS был правильного размера его необходимо откадрировать (sic!) одним из трех способов: сделать кроппинг, поместить во фрейм или применить маску. По-моему, самое простое это кроппинг. Единственное, что необходимо помнить, это то что кропить надо противоположные стороны от нашей точки отсчета (т.е. если в Illustrator, мы поместили нижний левый угол в 0,0, то кропить в PageMaker надо сверху и справа).
CorelDRAW EPS и Adobe PageMaker 6.52
Как уже было написано, PageMaker округляет значения %%BoundingBox, поэтому EPS в CorelDRAW надо подготовить так же как и в Illustrator, т.е. сделать так чтобы один из углов в %%BoundingBox имел целочисленные координаты. Но следует учесть, что CorelDRAW, в отличие от Illustrator определяет %%BoundingBox не от точки начала координат, а всегда от левого нижнего угла страницы. Выбрана ли опция Floating point %%BoundingBox -- не играет роли. Размещение в PageMaker аналогично описанному для Illustrator.
Еще следует помнить о том, что обводка увеличивает размеры объекта на величину своей толщины, т.е. при позиционировании картинки и определении ее размеров в CorelDRAW и Illustrator необходимо учесть обводку. Но я полагаю, что это очевидно.
ЧАСТЬ 2. TIFF
В TIFF проблемы округления несколько иного рода.
Для TIFF, обычно, используются "круглые" значения разрешения, например, что-то вроде 225, 250 или 300 dpi.
dpi! а размеры в см или мм!
Простой эксперимент.
Делаем в Photoshop картинку 10х10 см, 300 dpi (нижеприведенные расчеты даны для этого разрешения, но все выводы справедливы и для 225, и для 250).
Смотрим Image Size -- все четко, как заказывали. Там же видим, что мы получили 1181х1181 пикс.
Т.е. мы имеем три взаимосвязанные величины:
- размер в пикселях
- размер в см
- разрешение
Теперь считаем:
- 1181 пикс. укладываются в 10 см с разрешением 118,1 пикс/см, т.е. 299,974 пикс/дюйм (dpi)
- 1181 пикс. с разрешением 300 пикс/дюйм дают нам 3,936(6) дюймов, т.е. 9,99913(3) см
- в 10 см с разрешением 300 пикс/дюйм укладывается в 1181,10236... пикс.
Третий вариант отметаем, т.к. картинка всегда складывается из целого числа пикселей.
Так вот, в TIFF мы имеем вариант 2. Т.к. согласно спецификации TIFF 6.0 в файл записываются размеры в пикселях и разрешение, а линейные размеры являются вычисляемым параметром (так же работает и Photoshop). А т.к. точность линейных размеров в Photoshop для сантиметров -- 2 знака после запятой, то 9,99913(3) см он показывает как 10 см (величина ошибки зависит от разрешения и размера картинки и может достигать 0,1 мм).
Как это можно подтвердить? Если изменить размеры с 10 на 11 и тут же вернуть назад (без ресемплинга), то значение разрешения будет не 300 dpi, а те самые 299,974 dpi. Собственно здесь и заключается ответ на вопрос "что делать?".
Если необходимо иметь точные линейные размеры в программе верстки (и на выводе!) нужно изменить и вернуть назад в Photoshop линейные размеры картинки.
Но следует понимать, что таким образом не всегда можно "поймать" точный
размер и по вертикали и по горизонтали. Для наглядности пример. Создаем
картинку 13х11 см, 225 dpi. Имеем реальные размеры 13,0048х10,9954 см
(1152х974 пикс., 225 dpi). Соответственно, изменив ширину мы получим
13х10,9913 см (225,083 dpi), а изменив высоту 13,0103х11 см (224,905 dpi).
Может возникнуть вопрос, что это за разрешение 299,974 dpi, а не 300 dpi, не возникнут ли проблемы при растрировании RIPом и т.п. Так вот, RIPу что 299,974 dpi, что 300 dpi по барабану. Для RIPа разрешение производный параметр, при растрировании важно какие линейные размеры должна иметь картинка и сколько пикселей в ней есть.
Однако, если хочется иметь целое значение dpi и работать с размерами в см (мм) есть заветное число 254 dpi (как правило этого разрешения достатоно для большинства линиатур). 254 dpi это соответственно 100 пикс./см, т.е. в Photoshop при точности задания размеров 0,01 см, при этом разрешении: 0,01 см = 1 пикс.
Растровый EPS (Photoshop)
Для данного типа файлов актуальны оба типа погрешности! С одной стороны справедливо все сказанное для TIFF (т.е. для Photoshop линейные размеры являются вторичным, вычисляемым параметром), с другой стороны Photoshop записывает размеры в EPS так же как и Illustrator, т.е. точное значение в %%HiResBoundingBox и округленное в %%BoundingBox. Но в отличие от Illustrator значение X1, Y1 всегда равны 0, а X2, Y2 округляются до ближайшего целого.
Для нашего примера сначала (10х10 см, 300 dpi):
%%BoundingBox: 0 0 283 283
%%HiResBoundingBox: 0 0 283.44 283.44
После корректировки разрешения (10х10 см, 299,974 dpi):
%%BoundingBox: 0 0 283 283
%%HiResBoundingBox: 0 0 283.4646 283.4646
Теперь если поместить этот EPS в программу которая понимает %%HiResBoundingBox (например Illustrator), размеры будут точно 10 см.
Но как быть с остальными?
С PageMaker достаточно все просто: необходимо только помнить, что левый нижний угол превью соответствует реальному изображению. А чтобы позиционировать относительно других углов необходимо сделать кроппинг сверху и справа до реальных размеров.
При импорте в CorelDRAW такое изображение лучше не поместить, а интерпретировать. Тогда это будет не инкапсулированный EPS с округленными размерами, а растр, причем во втором случае точно 10х10 см (а для первого можно непосредственно в CorelDRAW изменить значения на точные).
Внимание! Не надо подгонять до точного значения размеры инкапсулированного EPS, т.к. они округленны и не соответствуют реальным.
Стоит обратить внимание на то, что в CorelDRAW для растра разрешение вторично (т.е. вычисляемый параметр, который показывается округленным до целого числа), поэтому например TIFF из CorelDRAW имеет точные линейные размеры и, как правило, не "круглое" значение разрешения.
Теперь как быть с QuarkXPress.
Так как в QuarkXPress привязка всегда осуществляется по верхнему левому углу, то после импортирования Photoshop EPS в бокс с точными размерами его необходимо выровнять по нижнему левому углу (либо по цифрам, либо с помощью экстеншена).
ПРОЧИЕ ПОГРЕШНОСТИ
Приведенная выше информация поможет существенно повысить точность позиционирования импортированной графики. Но стоит помнить о том, что каждая программа, файловый формат и выводные устройства имеет свои ограничения по точности.
Если принять во внимание, что фотовывод с разрешением 2450 dpi обеспечивает точность 0,01 мм и что уже такое значение ошибки не обнаруживается невооруженным глазом, то по-моему данное значение можно принять, как предел точности (т.е. выше которой не имеет смысла говорить).
Почти все программы для ДТП обеспечивают такую точность. Исключение составляет, пожалуй, только PageMaker у которого точность 1/20 пт, т.е. около 0,018 мм. Стоит обратить внимание на то, что для многих программ точность с которой позволяется задавать значение и реальная точность не совпадают. Например, в том же PageMaker точность при вводе 0,01 мм и 0,01 пт. Или CorelDRAW в котором величина точности при вводе настраивается в опциях вплоть до 0,000001 ед. изм.
С автором этой статьи можно связаться по e-mail:pole_c@chat.ru