PHP gd库澄清

时间:2010-02-02 15:07:29

标签: php gd

我正在查看此代码并已通过文档,但仍然不明白这应该如何工作。代码工作正常,但我想知道我是否应该将标题输出为png而不是jpeg。

此代码究竟发生了什么? png图像是否转换为jpeg?

我最终想要做的是将所有gif,jpg,bmp和png图像水印在一个目录中。无论图像类型是jpg,我都输出所有标题。它是否正确?我希望我在这里有意义,我有点累了。

$im2 = imagecreatefrompng($image)
imagecopy() and more code here
header("Content-Type: image/jpeg");
imagejpeg($im2,'',50);

4 个答案:

答案 0 :(得分:3)

您的代码所做的或多或少如下:

// Load the PNG file from disk into memory
$im2 = imagecreatefrompng($image) 

$im2现在是resource,引用图片。一旦进入记忆,它不是png或jpeg;它是原始的,未压缩的数据。图像的“格式”指定原始数据的打包和格式化方式;此时, 没有这样的格式。它只是内存中的数据。

// Some code which works with the image in memory, adding your watermark?
imagecopy() and more code here

// Tell the browser that we're output a JPG
header("Content-Type: image/jpeg");

如果您请求jpg(即http://host.com/image.jpg),那么服务器会负责为您编写此标头。如果您通过PHP动态制作JPG,则必须手动输出标题。否则,PHP假定您正在编写HTML并在向stdout写入任何内容后立即为您输出相应的标头,可以通过echo或仅使用<?php ?>标记之外的文本/空格。

// compress as a jpeg, and send to browser
imagejpeg($im2,'',50);

imagejpeg获取原始图像,将其压缩为jpg,并将其写入文件(如果您给它一个文件名)或stdout(将其发送到浏览器)。从技术上讲,要输出到浏览器,第二个参数应为null,而不是''。最后一个参数50将jpeg质量指定为百分比。 100是高质量,0是低质量。

答案 1 :(得分:1)

无论原始对象的格式如何,imagejpeg函数都以JPEG格式输出图像。如果你想保留原始格式,你需要在加载文件时确定它,然后在生成输出时使用不同的函数 - 有函数imagepng,imagegif等。

答案 2 :(得分:1)

代码将图像从PNG文件加载到GD资源中,然后对其进行操作,最后以不同的格式(JPEG)将图像输出到浏览器。

当你致电imagecreatefrompng时,你不只是指定GD应该使用该文件作为图像的当前工作副本,你告诉它读取文件,从PNG格式解码,并以某种未知的内部格式将其加载到内存中。此时,最初读取图像的文件格式不再重要。输出时,您必须指定所需的格式,因为它不再具有与之关联的格式。这就是您使用imagejpeg

的原因

答案 3 :(得分:1)

imagecreatefrompng正在加载PNG文件中的图像数据。此时的图像数据只是GD特定的像素数据。

imagejpeg将像素数据输出为jpeg。所以你的标题应该在这种情况下指定jpeg。