请讲解下面的GD库函数:图像创建与加载13个
imagecreate() - 创建基于调色板的图像 imagecreatetruecolor() - 创建真彩色图像 imagecreatefromgd() - 从GD格式文件创建图像 imagecreatefromgd2() - 从GD2格式文件创建图像 imagecreatefromgd2part() - 从GD2文件部分区域创建图像 imagecreatefromgif() - 从GIF文件创建图像 imagecreatefromjpeg() - 从JPEG文件创建图像 imagecreatefrompng() - 从PNG文件创建图像 imagecreatefromstring() - 从二进制字符串创建图像 imagecreatefromwbmp() - 从WBMP文件创建图像 imagecreatefromxbm() - 从XBM文件创建图像 imagecreatefromxpm() - 从XPM文件创建图像 imagecreatefromwebp() - 从WebP文件创建图像
GD库图像创建与加载函数详解
根据您的要求,我将继续按照之前的形式,详细讲解GD库中用于图像创建与加载的相关函数。以下是13个核心函数的详细解析,每个函数都包含语法结构、参数说明、示例代码及逐行解析。
一、imagecreate() - 创建基于调色板的图像
语法结构
resource|false imagecreate(int $width, int $height)
参数说明
$width: 图像宽度(像素),必须大于0$height: 图像高度(像素),必须大于0
返回值
成功返回图像资源标识符,失败返回false。
示例代码及解析
<?php
// 创建200x100像素的调色板图像
$width = 200;
$height = 100;
$image = imagecreate($width, $height);
// 检查是否创建成功
if ($image === false) {
die("无法创建图像资源");
}
// 分配背景色(红色)
$bg_color = imagecolorallocate($image, 255, 0, 0);
// 填充背景
imagefill($image, 0, 0, $bg_color);
// 输出图像
header('Content-Type: image/png');
imagepng($image);
// 释放资源
imagedestroy($image);
?>代码解析:
imagecreate()创建调色板图像,指定宽高检查返回值是否为false(创建失败)
imagecolorallocate()分配颜色(红色)imagefill()填充背景设置HTTP头并输出PNG图像
imagedestroy()释放资源
注意事项
调色板图像最多支持256色
第一个分配的颜色自动成为背景色
性能比真彩色图像好但色彩表现有限
二、imagecreatetruecolor() - 创建真彩色图像
语法结构
resource|false imagecreatetruecolor(int $width, int $height)
参数说明
$width: 图像宽度(像素),必须大于0$height: 图像高度(像素),必须大于0
返回值
成功返回图像资源标识符,失败返回false。
示例代码及解析
<?php
// 创建400x300的真彩色图像
$image = imagecreatetruecolor(400, 300);
// 创建渐变色背景
for ($y = 0; $y < 300; $y++) {
$color = imagecolorallocate($image, 0, $y/300*255, 255-$y/300*255);
imageline($image, 0, $y, 399, $y, $color);
}
// 添加文字
$text_color = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 5, 150, 140, "TrueColor", $text_color);
// 输出
header('Content-Type: image/jpeg');
imagejpeg($image, null, 90);
// 释放
imagedestroy($image);
?>代码解析:
创建400x300真彩色图像
使用循环创建垂直渐变背景
添加白色文字
输出JPEG图像(质量90)
释放资源
注意事项
支持16.7百万色(24位)
默认背景为黑色
适合照片等高质量图像处理
三、imagecreatefromgd() - 从GD格式文件创建图像
语法结构
resource|false imagecreatefromgd(string $filename)
参数说明
$filename: GD格式图像文件路径
返回值
成功返回图像资源标识符,失败返回false。
示例代码及解析
<?php
// 从GD文件创建图像
$gd_file = "example.gd";
$image = imagecreatefromgd($gd_file);
if ($image === false) {
die("无法加载GD文件");
}
// 获取图像信息
$width = imagesx($image);
$height = imagesy($image);
// 转换为PNG输出
header('Content-Type: image/png');
imagepng($image);
// 释放
imagedestroy($image);
?>代码解析:
从GD格式文件加载图像
检查是否加载成功
获取图像尺寸
转换为PNG格式输出
释放资源
注意事项
GD格式是GD库的原始格式
现在很少使用,主要用于遗留系统
文件通常以.gd为扩展名
四、imagecreatefromgd2() - 从GD2格式文件创建图像
语法结构
resource|false imagecreatefromgd2(string $filename)
参数说明
$filename: GD2格式图像文件路径
返回值
成功返回图像资源标识符,失败返回false。
示例代码及解析
<?php
// 从GD2文件创建图像
$image = imagecreatefromgd2("texture.gd2");
if (!$image) {
// 尝试创建新图像作为后备
$image = imagecreatetruecolor(100, 100);
$color = imagecolorallocate($image, 200, 200, 200);
imagefill($image, 0, 0, $color);
}
// 输出
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>代码解析:
尝试加载GD2文件
如果失败则创建新的灰色图像
输出PNG图像
释放资源
注意事项
GD2是GD格式的改进版
支持分块存储提高大图像处理效率
现代应用中也较少使用
五、imagecreatefromgd2part() - 从GD2文件部分区域创建图像
语法结构
resource|false imagecreatefromgd2part( string $filename, int $srcX, int $srcY, int $width, int $height )
参数说明
$filename: GD2格式图像文件路径$srcX: 源图像左上角x坐标$srcY: 源图像左上角y坐标$width: 要截取的宽度$height: 要截取的高度
返回值
成功返回图像资源标识符,失败返回false。
示例代码及解析
<?php
// 从GD2文件截取100x100的区域(从50,50开始)
$image = imagecreatefromgd2part("large_image.gd2", 50, 50, 100, 100);
if ($image === false) {
die("无法截取图像区域");
}
// 添加边框
$border_color = imagecolorallocate($image, 255, 0, 0);
imagerectangle($image, 0, 0, 99, 99, $border_color);
// 输出
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
?>代码解析:
从GD2文件截取指定区域
检查是否成功
添加红色边框标记截取区域
输出JPEG图像
释放资源
注意事项
适用于处理大型GD2图像的部分区域
坐标和尺寸不能超出原图范围
必须先确保GD2文件有效
六、imagecreatefromgif() - 从GIF文件创建图像
语法结构
resource|false imagecreatefromgif(string $filename)
参数说明
$filename: GIF图像文件路径
返回值
成功返回图像资源标识符,失败返回false。
示例代码及解析
<?php
// 从GIF文件创建图像
$gif_file = "animation.gif";
$image = imagecreatefromgif($gif_file);
if (!$image) {
die("无法加载GIF图像");
}
// 如果是动画GIF,只获取第一帧
// 转换为PNG输出
header('Content-Type: image/png');
imagepng($image);
// 获取图像尺寸
echo "宽度: " . imagesx($image) . "px, 高度: " . imagesy($image) . "px";
imagedestroy($image);
?>代码解析:
加载GIF文件
检查是否成功
输出PNG格式(只输出第一帧)
获取并显示图像尺寸
释放资源
注意事项
动画GIF只读取第一帧
某些GIF版本可能不支持
透明度信息会被保留
七、imagecreatefromjpeg() - 从JPEG文件创建图像
语法结构
resource|false imagecreatefromjpeg(string $filename)
参数说明
$filename: JPEG图像文件路径
返回值
成功返回图像资源标识符,失败返回false。
示例代码及解析
<?php
// 从JPEG创建图像(带错误处理)
try {
$image = @imagecreatefromjpeg("photo.jpg");
if ($image === false) {
throw new Exception("无法加载JPEG图像");
}
// 添加水印
$watermark_color = imagecolorallocatealpha($image, 255, 255, 255, 60);
imagestring($image, 5, 10, 10, "SAMPLE", $watermark_color);
// 输出高质量JPEG
header('Content-Type: image/jpeg');
imagejpeg($image, null, 95);
} catch (Exception $e) {
// 创建错误替代图像
$image = imagecreatetruecolor(400, 300);
$bg = imagecolorallocate($image, 200, 200, 200);
imagefill($image, 0, 0, $bg);
$text_color = imagecolorallocate($image, 255, 0, 0);
imagestring($image, 5, 150, 140, $e->getMessage(), $text_color);
header('Content-Type: image/jpeg');
imagejpeg($image);
} finally {
if (isset($image)) {
imagedestroy($image);
}
}
?>代码解析:
使用错误抑制符@和try-catch处理错误
加载JPEG图像
添加半透明水印
输出高质量JPEG
出错时创建错误提示图像
确保资源被释放
注意事项
支持渐进式JPEG
大图像可能消耗较多内存
建议使用错误处理机制
八、imagecreatefrompng() - 从PNG文件创建图像
语法结构
resource|false imagecreatefrompng(string $filename)
参数说明
$filename: PNG图像文件路径
返回值
成功返回图像资源标识符,失败返回false。
示例代码及解析
<?php
// 从PNG创建图像并保留透明度
$png_file = "transparent.png";
$image = imagecreatefrompng($png_file);
if ($image === false) {
die("无法加载PNG图像");
}
// 确保保留透明度
imagealphablending($image, false);
imagesavealpha($image, true);
// 创建新图像并合并
$new_image = imagecreatetruecolor(imagesx($image), imagesy($image));
$white = imagecolorallocate($new_image, 255, 255, 255);
imagefill($new_image, 0, 0, $white);
imagecopy($new_image, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
// 输出
header('Content-Type: image/png');
imagepng($new_image);
// 释放
imagedestroy($image);
imagedestroy($new_image);
?>代码解析:
加载PNG图像
设置保留透明度
创建新白色背景图像
合并原图(带透明度)到新图像
输出PNG
释放两个图像资源
注意事项
必须正确处理alpha通道
imagesavealpha()是关键适合处理带透明度的图形
九、imagecreatefromstring() - 从二进制字符串创建图像
语法结构
resource|false imagecreatefromstring(string $image_data)
参数说明
$image_data: 包含图像数据的字符串
返回值
成功返回图像资源标识符,失败返回false。
示例代码及解析
<?php
// 从Base64字符串创建图像
$base64_string = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAAE0lEQVR4XmP8z0A8YIKMYYKMAX4gBBcAMfQJiAAAAABJRU5ErkJggg==";
$binary_data = base64_decode($base64_string);
// 尝试从字符串创建图像
$image = imagecreatefromstring($binary_data);
if ($image === false) {
die("无效的图像数据");
}
// 获取图像类型
$type = getimagesizefromstring($binary_data)[2];
$types = [
IMAGETYPE_GIF => "GIF",
IMAGETYPE_JPEG => "JPEG",
IMAGETYPE_PNG => "PNG",
IMAGETYPE_WEBP => "WEBP"
];
// 输出
header('Content-Type: image/' . strtolower($types[$type]));
switch ($type) {
case IMAGETYPE_GIF: imagegif($image); break;
case IMAGETYPE_JPEG: imagejpeg($image); break;
case IMAGETYPE_PNG: imagepng($image); break;
case IMAGETYPE_WEBP: imagewebp($image); break;
}
imagedestroy($image);
?>代码解析:
解码Base64图像数据
从二进制字符串创建图像
使用
getimagesizefromstring()检测图像类型根据类型输出正确格式
释放资源
注意事项
可以自动检测多种格式
适合处理数据库存储的图像
必须确保字符串是有效的图像数据
十、imagecreatefromwbmp() - 从WBMP文件创建图像
语法结构
resource|false imagecreatefromwbmp(string $filename)
参数说明
$filename: WBMP图像文件路径
返回值
成功返回图像资源标识符,失败返回false。
示例代码及解析
<?php
// 从WBMP创建图像(无线位图)
$wbmp_file = "graphic.wbmp";
$image = imagecreatefromwbmp($wbmp_file);
if ($image === false) {
die("无法加载WBMP图像");
}
// 转换为PNG输出
header('Content-Type: image/png');
imagepng($image);
// 获取图像信息
$width = imagesx($image);
$height = imagesy($image);
$is_truecolor = imageistruecolor($image);
echo "尺寸: {$width}x{$height}, 类型: " . ($is_truecolor ? "真彩色" : "调色板");
imagedestroy($image);
?>代码解析:
加载WBMP文件
检查是否成功
转换为PNG输出
获取并显示图像信息
释放资源
注意事项
WBMP是单色位图格式
主要用于移动设备
现代应用中较少使用
十一、imagecreatefromxbm() - 从XBM文件创建图像
语法结构
resource|false imagecreatefromxbm(string $filename)
参数说明
$filename: XBM图像文件路径
返回值
成功返回图像资源标识符,失败返回false。
示例代码及解析
<?php
// 从XBM创建图像(X BitMap)
$xbm_file = "icon.xbm";
$image = imagecreatefromxbm($xbm_file);
if ($image === false) {
die("无法加载XBM图像");
}
// 分配颜色(反转颜色)
$bg = imagecolorallocate($image, 255, 255, 255);
$fg = imagecolorallocate($image, 0, 0, 0);
// 重新绘制图像
for ($y = 0; $y < imagesy($image); $y++) {
for ($x = 0; $x < imagesx($image); $x++) {
$color = imagecolorat($image, $x, $y);
imagesetpixel($image, $x, $y, $color ? $bg : $fg);
}
}
// 输出
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>代码解析:
加载XBM文件
检查是否成功
分配黑白颜色
反转XBM颜色(通常XBM是黑底白图)
输出PNG图像
释放资源
注意事项
XBM是ASCII编码的位图格式
常用于X Window系统
本质上是C语言源代码
十二、imagecreatefromxpm() - 从XPM文件创建图像
语法结构
resource|false imagecreatefromxpm(string $filename)
参数说明
$filename: XPM图像文件路径
返回值
成功返回图像资源标识符,失败返回false。
XPM格式特点
XPM(X PixMap)是:
基于ASCII文本的图像格式
使用C语言语法定义
支持颜色名称和透明度
常用于Unix/Linux系统图标
示例代码及解析
<?php
// 检查XPM支持
if (!function_exists('imagecreatefromxpm')) {
die("您的GD库不支持XPM格式");
}
// 从XPM文件创建图像
$xpm_file = "icon.xpm";
$image = imagecreatefromxpm($xpm_file);
if ($image === false) {
// 创建替代图像
$image = imagecreatetruecolor(64, 64);
$bg = imagecolorallocate($image, 240, 240, 240);
$text_color = imagecolorallocate($image, 200, 0, 0);
imagefill($image, 0, 0, $bg);
imagestring($image, 3, 10, 25, "XPM Load Failed", $text_color);
} else {
// 添加边框
$border_color = imagecolorallocate($image, 100, 100, 100);
imagerectangle($image, 0, 0, imagesx($image)-1, imagesy($image)-1, $border_color);
}
// 输出PNG
header('Content-Type: image/png');
imagepng($image);
// 释放资源
imagedestroy($image);
?>代码解析:
首先检查XPM支持
尝试加载XPM文件
失败时创建错误提示图像
成功时添加边框
输出PNG格式
释放资源
注意事项
XPM文件本质是C源代码
需要GD库编译时启用XPM支持
文件通常有.xpm扩展名
适合处理小型图标类图像
十三、imagecreatefromwebp() - 从WebP文件创建图像
语法结构
resource|false imagecreatefromwebp(string $filename)
参数说明
$filename: WebP图像文件路径
返回值
成功返回图像资源标识符,失败返回false。
WebP格式特点
Google开发的现代图像格式
支持有损和无损压缩
支持透明度(alpha通道)
通常比JPEG/PNG更小的文件大小
示例代码及解析
<?php
// 从WebP创建图像(带透明度处理)
$webp_file = "photo.webp";
$image = imagecreatefromwebp($webp_file);
if ($image === false) {
die("无法加载WebP图像");
}
// 获取图像信息
$width = imagesx($image);
$height = imagesy($image);
$is_truecolor = imageistruecolor($image);
// 创建新图像并保留透明度
$new_image = imagecreatetruecolor($width, $height);
imagealphablending($new_image, false);
imagesavealpha($new_image, true);
// 填充透明背景
$transparent = imagecolorallocatealpha($new_image, 0, 0, 0, 127);
imagefill($new_image, 0, 0, $transparent);
// 合并图像
imagecopy($new_image, $image, 0, 0, 0, 0, $width, $height);
// 添加水印(半透明)
$watermark_color = imagecolorallocatealpha($new_image, 255, 255, 255, 60);
imagettftext($new_image, 20, 0, 10, 30, $watermark_color, 'arial.ttf', 'WATERMARK');
// 输出
header('Content-Type: image/webp');
imagewebp($new_image, null, 90); // 质量90
// 释放资源
imagedestroy($image);
imagedestroy($new_image);
?>代码解析:
加载WebP图像
获取图像尺寸和类型信息
创建新图像并设置alpha通道处理
填充透明背景
复制原图像到新图像
添加半透明水印(使用TrueType字体)
输出WebP格式(质量90)
释放两个图像资源
注意事项
需要GD库2.1.0及以上版本
必须正确处理alpha通道
输出质量参数范围0-100
适合需要高压缩率的Web应用
综合比较表
函数名称 | 功能描述 | 支持格式 | 内存消耗 | 透明度支持 | 常见用途 | 注意事项 |
imagecreate() | 创建基于调色板的图像 | 无 | 低 | 不支持 | 简单图形绘制 | 仅支持256色,渐变色可能出现色带 |
imagecreatetruecolor() | 创建真彩色图像(24/32位) | 无 | 较高 | 支持 | 照片处理/复杂图形 | 必须用imagealphablending()启用透明通道 |
imagecreatefromgd() | 从GD格式文件加载图像 | .gd | 中等 | 视源文件 | 读取GD专用格式 | 该格式已逐渐淘汰 |
imagecreatefromgd2() | 加载完整GD2格式图像 | .gd2 | 中等 | 视源文件 | 读取分块存储的GD2文件 | 文件需完整保存 |
imagecreatefromgd2part() | 加载GD2文件的部分区域 | .gd2 | 可变 | 视源文件 | 大图像局部处理 | 需精确指定(x,y,width,height)坐标 |
imagecreatefromgif() | 从GIF文件创建图像资源 | .gif | 中等 | 支持 | 动画帧提取/简单图标 | PHP5.6+移除动画支持 |
imagecreatefromjpeg() | 从JPEG文件创建图像资源 | .jpg | 高 | 不支持 | 照片处理 | 质量损失不可逆 |
imagecreatefrompng() | 从PNG文件创建图像资源 | .png | 较高 | 支持 | 透明图像处理 | 保留alpha通道需设置imagesavealpha(true) |
imagecreatefromstring() | 解析二进制字符串为图像 | 多格式 | 视内容 | 视格式 | 网络图像处理 | 需先验证字符串有效性 |
imagecreatefromwbmp() | 加载WBMP(无线位图)格式 | .wbmp | 低 | 不支持 | 移动设备兼容图像 | 仅支持单色位图 |
imagecreatefromxbm() | 加载XBM(X BitMap)格式 | .xbm | 低 | 不支持 | 黑白图标处理 | 格式常见于Unix系统 |
imagecreatefromxpm() | 加载XPM(X PixMap)格式 | .xpm | 中等 | 支持 | Linux系统图标 | 需服务器安装X11库 |
imagecreatefromwebp() | 从WebP文件创建图像资源 | .webp | 中等 | 支持 | 现代网页图像 | PHP需编译时启用WebP支持 |
通用注意事项
资源管理:所有图像资源都应使用
imagedestroy()释放错误处理:应检查每个函数返回值是否为false
内存考虑:大图像会消耗大量内存
格式支持:不同服务器GD库配置可能支持不同格式
文件权限:确保PHP有权限读取源文件
输出缓冲:输出图像前确保没有其他输出
以上详细讲解了GD库中所有图像创建与加载函数,包括它们的语法结构、参数说明、使用示例和注意事项。这些函数是PHP图像处理的基础,掌握它们对于开发图像相关的Web应用非常重要