Мне нужно сделать фотографию, которую кто-то загрузил через форму, изменил размер, объединился с кадром высокого разрешения @ 300 точек на дюйм и сохранил все @ 300dpi для лучшего качества печати.
можно ли обрабатывать изображения с высоким разрешением через GD, и если да, можете ли вы предоставить некоторую информацию о том, как это сделать? У меня есть код, который уже выполняет изменение размера и слияние, но я не уверен, будет ли он работать с правильным разрешением.
благодаря
В принципе это возможно: просто используйте правильное количество пикселей. (Единица измерения 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 может быть лучшим вариантом, если вы можете использовать его на своем сервере.
DPI – это коэффициент преобразования для печати. Это абсолютно не влияет на то, как GD увидит изображение. Изображение размером 200 пикселей на 150 пикселей всегда будет составлять 200 пикселей на 150 пикселей, будь то 10 dpi или 5000 точек на дюйм.
однако, когда вы распечатываете изображение, 200×150 @ 10dpi будет делать изображение размером 20 дюймов на 15 дюймов (300 квадратных дюймов), в то время как версия 5000 точек на дюйм будет делать 0,04×0,03 (0,0012 квадратных дюйма).
Единственное ограничение состоит в том, что у вас должно быть достаточно памяти для PHP для хранения содержимого DECODED в памяти. 24-битное изображение размером 1000×1000 пикселей требует 1000x1000x3 = примерно 3 мегабайта памяти, на минимум (плюс внутренние накладные расходы). Затем добавьте дополнительную память для хранения новых изображений, которые будут иметь результаты ваших манипуляций с изображениями.
Значение по умолчанию для изображения на веб-странице равно 72 или 96 (Mac или Windows / Linux). Вы можете указать ширину и высоту изображения с использованием атрибутов ширины и высоты тега img и сгенерировать изображение с требуемым разрешением в дюймах.
<img src="/images/image.png" width="300" height="200">
Предположим, что разрешение экрана по умолчанию – 72, $resdpi
переменной $resdpi
:
$resdpi = $resolution / 72;
затем сделайте изображение на GD, умножив ширину и высоту на эту переменную, и вы получите большое изображение, которое будет отображаться как по умолчанию 72dpi на экране, но будет печатать с гораздо большим разрешением.
GD все о пикселях, DPI не приходит к нему, поскольку для этого требуется какой-то выход устройства. Если вы знаете свой окончательный размер печати, просто убедитесь, что размеры в пикселях правильно соответствуют требуемому DPI.
Как правило, если вы используете большие изображения, ваша основная проблема будет эффективной, как в скорости, так и в использовании памяти. Я бы рекомендовал использовать ImageMagick для более сложных заданий.