bolega
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору shch_vg Цитата: как Ваша программа при импорте определяет, с каким разрешением записана та или иная страница | Очень просто. Из pdf я получаю 2 значения: размеры изображения и размеры области на странице (в пунктах, которые легко перводятся в дюймы), в которые это изображение выводится. Поделив одно на другое, получим dpi. Здесь есть одна неприятность. Если изображение занимает всю страницу, то размеры области в общем случае не имеют никакого значения. Т.е. при создании pdf можно указать хоть метр, хоть километр, в обоих случаях acrobat (и любой другой просмотрщик) все равно правильно покажет страницу (за счет простого масштабирования в процессе вывода на экран). Главное - лишь бы соблюсти пропорции. Теперь понятно, почему может получиться 96 dpi. Если программа, которая создавала pdf, описала неправильно размеры страницы, и области тем самым, (т.е. как бы "натянуло" скан на те размеры, которые указаны и взяты возможно с потолка), то несмотря на правильное отображение, правильное dpi уже не узнать (только методом тыка). Теперь как узнать эти параметры. Размеры в пикселях хранятся в pdf непосредственно в символьном виде, их можно увидеть, открыв pdf в текстовом редакторе (тэги Width, Height после каждого /Image). Размеры области, в которую выводится скан, напрямую в pdf не хранятся вообще. Вместо этого хранится матрица, которая переводит логические координаты сканы (а они всегда принимаются равными 0..1) в физические координаты страницы. Эта стандартная 4х4 однородная матрица линейных преобразований содержит в себе результат поворота, смещения, масштабирования и сдвига (shear) изображения. Т.е. в общем случае описывает непрямоугольную область вывода скана. Матрица в pdf может задаваться не единожды (часто так и бывает), в этом случае чтобы получить окончательную матрицу, нужно их все собрать и последовательно переменожить. Таким образом, чтобы получить физические координаты области скана, нужно перемножить координыты 4-х точек изображения на эту матрицу, в результате получим четыре точки (left, top, right, bottom), которые и описывают область скана в дюймах. Как я говорил, в общем случае (при наличии поворота) это может быть ромб. Визуально увидеть в текстовом редакторе матрицу практически невозможно, во-первых, из-за того, что она разбита на несколько подматриц, которые еще нужно найти и объеденить (перемножить), а во-вторых, в отличие от тэгов, она сжимается (методом deflate) Вроде бы все. Добавлено: Еще подрбно объясню, откуда взялось именно 96dpi в том файле. Как обычно задется физический размер pdf-страницы, состоящей из скана? Берется скан, из него берется dpi, умножается на размеры скана и получается физический размер. Этот размер и устанавливается как размер pdf-страницы (бывают правда и извращения, когда размер страницы берется A4 или A5, и в него уже помещается скан). Теперь представим, что в скане не было прописано dpi, например, это был gif. Обычно в этом случае программы берут dpi монитора, т.е. 96. Исходя из этого и получается неверный размер страницы. Повторюсь, для отображения такого pdf это не играет никакой роли. То, что кромсатор восстановил 96dpi, говорит как раз о том, что он сделал все правильно, другое дело, что оно уже при создании pdf было неправильным. Также это говорит о том, что сканы скорее всего были гифами. Вообще-то, из pdf можно многое узнать о самом сканировщике (пол, возраст), но это уже другая история | Всего записей: 4587 | Зарегистр. 09-09-2002 | Отправлено: 10:39 28-11-2007 | Исправлено: bolega, 11:19 28-11-2007 |
|