我需要拍一张有人通过表单上传的照片,调整大小,与高分辨率的帧@ 300dpi合并并保留所有@ 300dpi,以获得最佳的打印质量。
是否可以通过GD处理高分辨率图像?如果可以,您能提供一些有关如何处理的信息吗?我的代码已经进行了大小调整和合并,但我不确定它是否能以正确的dpi工作。
由于
答案 0 :(得分:7)
基本上可以:只使用适当数量的像素。 (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 :(得分:1)
DPI是用于打印目的的转换因子。它与GD将如何看待图像完全没有关系。 200像素乘150像素的图像将始终为200像素乘150像素,无论是10dpi还是5000dpi。
然而,当你打印出图像时,200x150 @ 10dpi将产生20英寸×15英寸的图像(300平方英寸),而5000dpi版本将产生0.04x0.03(0.0012平方英寸)。
唯一的限制是你必须有足够的内存供PHP在内存中保存 DECODED 图像内容。 24位1000x1000像素图像需要1000x1000x3 =大约3meg字节的内存,最小值(加上内部开销)。然后额外的内存来保存新图像,这将有你的图像处理结果。
答案 2 :(得分:1)
网页上的默认图像dpi为72或96(Mac或Windows / Linux)。您可以使用img标签的宽度和高度属性指定图像的宽度和高度,并生成具有所需dpi的图像。
<img src="/images/image.png" width="300" height="200">
假设您的默认屏幕分辨率是72,而不是$resdpi
变量:
$resdpi = $resolution / 72;
然后,让GD上的图像将宽度和高度乘以该变量,您将得到一个大图像,在屏幕上显示为默认的72dpi,但会以更高的分辨率打印。
答案 3 :(得分:0)
GD是关于像素的,DPI没有进入它,因为这需要某种设备输出。如果您知道最终的打印尺寸,请确保以所需的DPI正确缩放像素尺寸。
通常,如果您使用的是大型图像,那么您的主要问题就是速度和内存使用效率。我建议使用ImageMagick来完成更复杂的工作。