我需要通过一个表单上传的照片进行调整大小,与高分辨率边框合并 @ 300dpi,并保持全部内容 @ 300dpi,以获得最佳的印刷质量。
是否可能通过GD处理高分辨率图像,如果可以,请提供一些相关信息。我已经有了调整大小和合并的代码,但不确定它是否按照正确的dpi工作。
谢谢
我需要通过一个表单上传的照片进行调整大小,与高分辨率边框合并 @ 300dpi,并保持全部内容 @ 300dpi,以获得最佳的印刷质量。
是否可能通过GD处理高分辨率图像,如果可以,请提供一些相关信息。我已经有了调整大小和合并的代码,但不确定它是否按照正确的dpi工作。
谢谢
基本上是可以实现的:只需使用适当数量的像素即可。(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是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,但在打印时具有更高的分辨率。
DPI是印刷目的的转换因子。它绝对不会影响GD如何看待图像。一个大小为200像素乘以150像素的图像将始终是200像素乘以150像素,无论它是10dpi还是5000dpi。
然而,当您打印图像时,200x150 @ 10dpi将生成20英寸乘以15英寸的图像(300平方英寸),而5000dpi版本将生成0.04x0.03(0.0012平方英寸)。
唯一的限制是您必须有足够的内存可用于PHP在内存中保存解码图像内容。一个24位1000x1000像素的图像需要大约3兆字节的内存,至少(加上内部开销)。然后需要额外的内存来保存新图像,其中包含您的图像操作结果。
GD 是关于像素的,DPI 不涉及其中,因为它需要某种设备输出。如果您知道最终打印尺寸,则只需确保以所需 DPI 缩放的像素尺寸正确。
通常,如果您使用大型图像,则主要问题将是效率,包括速度和内存使用。我建议对于更复杂的工作使用 ImageMagick。