качество печати изображений с помощью php и GD - PullRequest
3 голосов
/ 29 марта 2011

Мне нужно сделать фотографию, загруженную кем-либо через форму, изменить ее размер, объединить ее с рамкой высокого разрешения с разрешением 300 точек на дюйм и сохранить все это при разрешении 300 точек на дюйм для наилучшего качества печати.

возможно ли обрабатывать изображения в высоком разрешении через GD, и если да, не могли бы вы предоставить некоторую информацию о том, как?У меня есть код, который уже делает изменения размера и слияния, но я не уверен, что он будет работать с правильным разрешением.

Спасибо

Ответы [ 4 ]

7 голосов
/ 29 марта 2011

Это в принципе возможно: просто используйте правильное количество пикселей. (Единица dpi не имеет смысла в цифровых изображениях, она служит только для преобразования цифрового [пиксельного] изображения в физический формат).

Пример:

11 x 8 inch canvas @300 dpi = 3300 x 2400 pixels 

Однако вам понадобится много памяти для работы с изображениями такого размера. Эмпирическое правило

needed bytes = width x height x 3 (or 4 if alpha-channels are used)

это требование возрастает, если вы выполняете копирование или изменение размера, поскольку сценарию необходимо хранить несколько копий в памяти.

Вам понадобится очень щедрая настройка memory_limit, чтобы это работало.

Также обратите внимание, что GD может работать только с изображениями RGB.

Для больших изображений и данных CMYK, ImageMagick может быть лучшим вариантом, если вы можете использовать его на своем сервере.

1 голос
/ 22 января 2012

Стандартное разрешение изображения на веб-странице: 72 или 96 (Mac или Windows / Linux) Вы можете указать ширину и высоту изображения, используя атрибуты ширины и высоты тега img, и сгенерировать изображение с желаемым разрешением на дюйм в пределах.

<img src="/images/image.png" width="300" height="200">

Допустим, что ваше разрешение экрана по умолчанию составляет 72, а не переменная $resdpi:

$resdpi = $resolution / 72;

затем, сделайте изображение на GD умножив ширину и высоту на эту переменную, и вы получите большое изображение, которое будет отображаться на экране как 72dpi по умолчанию, но будет печатать с гораздо большим разрешением.

1 голос
/ 29 марта 2011

DPI - это коэффициент пересчета для печати.Это не имеет абсолютно никакого отношения к тому, как GD увидит изображение.Изображение с разрешением 200 на 150 пикселей всегда будет размером 200 на 150 пикселей, независимо от того, будет ли оно разрешением 10 или 5000 точек на дюйм.

. Однако при печати изображения разрешение 200x150 @ 10 точек на дюйм составит 20 на 15 дюймов.изображение (300 квадратных дюймов), в то время как версия с разрешением 5000 точек на дюйм будет иметь значение 0,04x0,03 (0,0012 квадратных дюйма).

Единственное ограничение заключается в том, что у вас должно быть достаточно памяти, чтобы PHP мог вместить DECODED содержимое изображения в памяти.24-битное изображение размером 1000x1000 пикселей требует 1000x1000x3 = примерно 3 мегабайта памяти при минимальном размере (плюс внутренние издержки).Затем дополнительная память для хранения новых изображений, которые будут иметь результаты ваших манипуляций с изображениями.

0 голосов
/ 29 марта 2011

GD это все о пикселях, DPI не входит в него, так как для этого требуется какой-то вывод устройства.Если вы знаете конечный размер отпечатка, просто убедитесь, что размеры в пикселях правильно масштабируются с требуемым DPI.

Как правило, если вы используете большие изображения, вашей главной проблемой будет эффективность, как вскорость и использование памяти.Я бы порекомендовал использовать ImageMagick для более сложных заданий.

...