使用php和GD打印高质量图像

使用php和GD打印高质量图像,php,image,image-processing,gd,Php,Image,Image Processing,Gd,我需要拍一张有人通过表单上传的照片,调整大小,合并一个高分辨率的框架@300dpi,并保持所有@300dpi,以获得最佳打印质量 是否可以通过GD处理高分辨率图像?如果可以,您能否提供一些如何处理的信息?我的代码已经进行了大小调整和合并,但我不确定它是否能在正确的dpi下工作 谢谢这基本上是可能的:只需使用适当数量的像素。(dpi单元在数字成像中没有意义,它仅用于将数字[像素]图像转换为物理格式) 例如: 11 x 8 inch canvas @300 dpi = 3300 x 2400 pix

我需要拍一张有人通过表单上传的照片,调整大小,合并一个高分辨率的框架@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)
如果进行复制或调整大小,则此要求会增加,因为脚本需要在内存中保留多个副本

您需要一个非常慷慨的
内存限制
设置才能工作

还请注意,GD只能处理RGB图像


对于大型图像和CMYK数据,如果您可以在服务器上使用,则可能是更好的选择。

DPI是用于打印目的的转换系数。这绝对与GD如何看待图像无关。200像素乘以150像素的图像将始终是200像素乘以150像素,无论是10dpi还是5000dpi

但是,当您打印图像时,200x150@10dpi将用于20英寸x 15英寸的图像(300平方英寸),而5000dpi版本将用于0.04x0.03(0.0012平方英寸)


唯一的限制是PHP必须有足够的内存来保存解码后的图像内容。24位1000x1000像素图像需要1000x1000x3=大约3meg字节的内存,最小值(加上内部开销)。然后用额外的内存来保存新图像,这些图像将具有图像处理的结果。

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


一般来说,如果您使用的是大型图像,那么您的主要问题将是效率,包括速度和内存使用。我建议将其用于更复杂的作业。

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

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

然后,将GD上的图像的宽度和高度乘以该变量,您将得到一个大图像,该图像在屏幕上显示为默认的72dpi,但将以更高的分辨率打印。

完全正确。请注意,CMYK TIFF 3300 x 2400像素约为30MB(3300px 2400px x 4色),因此请确保,只要它的像素数与300dpi相匹配,它就能正确打印?我想象要用相当多的资源来实现高分辨率,哦,很高兴。@David,这将取决于您将要使用的打印软件-您可能需要在那里指定dpi,以便以正确的格式打印像素。您将无法在位图文件中执行此操作(至少不能以可靠的方式执行)
$resdpi = $resolution / 72;