Я пробовал несколько тестов, используя Imagick::getImageResolution
в PDF, и я не могу понять, как получить разрешение (и цветное) изображения, встроенного в PDF. Я попытался вырвать изображение из PDF, но во время этого процесса кажется, что DPI произвольно установлен на 72, а не на то, что я делаю.
Я видел в 1564529, кто-то сказал, что DPI не имеет значения для PDF, но это неверно (когда изображение встроено в PDF, в PostScript определены несколько атрибутов изображения, например разрешение). Есть ли способ в PHP (возможно, с PSLib ?), Чтобы выяснить, что такое DPI встроенного изображения?
«Dpi» изображения в формате PDF (или PostScript) является более туманным, чем вы думаете. Это связано с тем, что можно визуализировать PDF в разных масштабах, и, следовательно, значение dpi будет меняться.
Вы правы, что есть информация о масштабном коэффициенте изображения, помещенного в документе. Это текущая матрица трансформации, но она не такая простая, как одно значение или даже одна матрица.
CTM отображает координаты в идеализированное «пользовательское пространство», номинально определяемое в точках (72 на дюйм), но бесконечно делимое. Когда дело доходит до рендеринга, «пространство пользователя» имеет дополнительное преобразование, применяемое для правильного масштабирования его в «пространство устройства», требуется преобразование, потому что устройство, вероятно, не 72 dpi.
Вы можете найти более полное объяснение этого в Справочном руководстве по PDF, особенно в разделе 4.2.1 в ссылке 1.7.
Таким образом, все, что вам нужно сделать, это взять объявленную / Width и / Height из словаря изображений и применить / Matrix, чтобы определить, насколько большой размер изображения находится в пользовательском пространстве. Учитывая, что пространство пользователя составляет 72 dpi, вы знаете, сколько сантиметров было масштабировано для изображения, количество пикселей, которое содержит изображение, и простое разделение даст вам ответ, который вы хотите.
В самом деле, это может случиться. Однако одна из проблем с вашей точки зрения состоит в том, что возможно, действительно, общий способ конкатенации матриц влиять на текущее масштабирование, поэтому просто смотреть на матрицу, примененную к изображению, не даст вам масштабного коэффициента, применяемого к этому изображение, потому что что-то еще может уже масштабировать CTM. Кроме того, PDF содержит «UserUnit» kludge, который позволяет файлу изменять масштабирование по умолчанию для пользовательского пространства.
Таким образом, единственный способ выработать «dpi» изображения – интерпретировать описание страницы до точки, в которой изображение отображается, выработать полное масштабирование в этой точке и оттуда выяснить, сколько области занимает изображение. Затем задайте ширину и высоту изображения, обработайте его dpi.
Попутно, вот вам загадка; его вполне возможно сделать одно и то же изображение несколько раз в PDF, используя одни и те же данные изображения. Вам нужно только один раз включить данные изображения. Если я рисую изображение, которое составляет 100 пикселей на 100 пикселей, и я рисую его на один квадратный дюйм, разрешение составляет 100 dpi. Теперь я рисую то же изображение, но я масштабирую его, чтобы покрыть половину дюйма. Разрешение отображаемого изображения теперь составляет 200 dpi.
Итак, что такое «dpi изображения»?
Надеюсь, это поможет вам: