使用php和GD打印质量图像

时间:2011-03-29 18:58:34

标签: php image image-processing gd

我需要拍一张有人通过表单上传的照片,调整大小,与高分辨率的帧@ 300dpi合并并保留所有@ 300dpi,以获得最佳的打印质量。

是否可以通过GD处理高分辨率图像?如果可以,您能提供一些有关如何处理的信息吗?我的代码已经进行了大小调整和合并,但我不确定它是否能以正确的dpi工作。

由于

4 个答案:

答案 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来完成更复杂的工作。