使用PHP和GD生成高质量的图像打印

3

我需要通过一个表单上传的照片进行调整大小,与高分辨率边框合并 @ 300dpi,并保持全部内容 @ 300dpi,以获得最佳的印刷质量。

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

谢谢

4个回答

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
一切正确。请注意,一个CMYK的TIFF格式的3300 x 2400像素大约为30MB(3300像素 x 2400像素 x 4种颜色)。 - horatio
所以只要像素数量匹配300dpi,那么它就会正确打印,这样才能确定吗?我想象中高分辨率需要很多资源,真是太好了。 - David
@David 这将取决于您要使用的打印软件 - 您可能需要在那里指定dpi以使像素以正确的格式打印。您将无法在位图文件中完成此操作(至少不能可靠地完成)。 - Pekka

1

网页默认图像的dpi是72或96(Mac或Windows/Linux)。您可以使用img标记的width和height属性指定图像的宽度和高度,并生成所需dpi的图像。

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

假设您的默认屏幕分辨率为72,那么请创建一个$resdpi变量:

$resdpi = $resolution / 72;

然后,在GD上制作图像时,将宽度和高度乘以该变量,您将获得一个大图像,它在屏幕上看起来像默认的72dpi,但在打印时具有更高的分辨率。


1

DPI是印刷目的的转换因子。它绝对不会影响GD如何看待图像。一个大小为200像素乘以150像素的图像将始终是200像素乘以150像素,无论它是10dpi还是5000dpi。

然而,当您打印图像时,200x150 @ 10dpi将生成20英寸乘以15英寸的图像(300平方英寸),而5000dpi版本将生成0.04x0.03(0.0012平方英寸)。

唯一的限制是您必须有足够的内存可用于PHP在内存中保存解码图像内容。一个24位1000x1000像素的图像需要大约3兆字节的内存,至少(加上内部开销)。然后需要额外的内存来保存新图像,其中包含您的图像操作结果。


0

GD 是关于像素的,DPI 不涉及其中,因为它需要某种设备输出。如果您知道最终打印尺寸,则只需确保以所需 DPI 缩放的像素尺寸正确。

通常,如果您使用大型图像,则主要问题将是效率,包括速度和内存使用。我建议对于更复杂的工作使用 ImageMagick


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接