您好!欢迎访问家园网-www.jy.wang!

家园网

​请讲解下面的GD库函数:图像输出‌

网络 作者:本站 点击:

请讲解下面的GD库函数:图像输出‌


imagepng() - 输出PNG图像

imagejpeg() - 输出JPEG图像(可设质量)

imagegif() - 输出GIF图像

imagewbmp() - 输出WBMP图像

imagegd() - 输出GD格式图像

imagegd2() - 输出GD2格式图像

imagewebp() - 输出WebP图像


以下是GD库图像输出函数的详细讲解,包含语法结构、参数说明、示例代码及专业解析:


一、imagepng() - 输出PNG图像

语法结构

bool imagepng(
    resource $image, 
    [mixed $to = null], 
    [int $quality = -1], 
    [int $filters = -1]
)

参数说明

参数类型说明
$imageresource图像资源
$tomixed输出路径(字符串)或直接输出(null)
$qualityint压缩级别(0-9),0无压缩
$filtersintPNG过滤器组合(PNG_FILTER_*常量)

示例代码

<?php
// 创建透明画布
$img = imagecreatetruecolor(300, 200);
$transparent = imagecolorallocatealpha($img, 0, 0, 0, 127);
imagefill($img, 0, 0, $transparent);
// 绘制半透明圆形
$red = imagecolorallocatealpha($img, 255, 0, 0, 63);
imagefilledellipse($img, 150, 100, 180, 180, $red);
// 输出PNG(启用alpha通道)
imagesavealpha($img, true);
imagepng($img, 'output.png', 6, PNG_FILTER_NONE); 
// 直接输出到浏览器
header('Content-Type: image/png');
imagepng($img, null, 9); // 最高质量
imagedestroy($img);
?>

代码解析‌:

  1. 创建300x200透明画布(imagecolorallocatealpha设置透明度)

  2. 绘制半透明红色圆形(alpha=63)

  3. 保存为PNG文件(质量级别6,禁用过滤器)

  4. 另输出到浏览器(质量级别9)

  5. 必须调用imagesavealpha保持透明度


二、imagejpeg() - 输出JPEG图像

语法结构

bool imagejpeg(
    resource $image, 
    [mixed $to = null], 
    [int $quality = -1]
)

参数说明

参数类型说明
$qualityint质量(0-100),默认75

示例代码

<?php
$img = imagecreatefrompng('source.png');
// 转换为JPEG背景
$bg = imagecreatetruecolor(imagesx($img), imagesy($img));
$white = imagecolorallocate($bg, 255, 255, 255);
imagefill($bg, 0, 0, $white);
imagecopy($bg, $img, 0, 0, 0, 0, imagesx($img), imagesy($img));
// 输出不同质量版本
imagejpeg($bg, 'high_quality.jpg', 90);  // 高质量
imagejpeg($bg, 'low_quality.jpg', 30);   // 低质量
imagedestroy($img);
?>

注意事项‌:

  • JPEG不支持透明度,需手动填充背景

  • 质量<60可能产生明显压缩伪影

  • 默认输出Progressive JPEG(渐进式加载)


三、imagegif() - 输出GIF图像

语法结构

bool imagegif(
    resource $image, 
    [mixed $to = null]
)

示例代码

<?php
// 创建动画GIF(多帧)
$frames = [];
for ($i = 0; $i < 5; $i++) {
    $frame = imagecreatetruecolor(100, 100);
    $color = imagecolorallocate($frame, rand(0,255), rand(0,255), rand(0,255));
    imagefill($frame, 0, 0, $color);
    $frames[] = $frame;
}
// 合并为GIF动画
$gif = new Imagick();
foreach ($frames as $frame) {
    $gif->addImage(new Imagick(imagegif($frame)));
    imagedestroy($frame);
}
$gif->writeImages('animation.gif', true);
?>

关键特性‌:

  • 单帧GIF直接输出

  • 多帧动画需配合Imagick扩展

  • 仅支持256色索引颜色


四、imagewbmp() - 输出WBMP图像

语法结构

bool imagewbmp(
    resource $image, 
    [mixed $to = null], 
    [int $foreground = null]
)

参数说明

参数类型说明
$foregroundint前景色(默认黑色)

示例代码

<?php
$img = imagecreate(200, 200);
$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);
imagefilledrectangle($img, 50, 50, 150, 150, $black);
// 输出WBMP(黑白位图)
header('Content-Type: image/vnd.wap.wbmp');
imagewbmp($img, null, $black); // 显式指定前景色
imagedestroy($img);
?>

应用场景‌:

  • 移动设备兼容图像

  • 超低带宽传输

  • 单色显示设备


五、imagegd() - 输出GD格式图像

语法结构

bool imagegd(
    resource $image, 
    [mixed $to = null]
)

示例代码

<?php
$img = imagecreatefromjpeg('photo.jpg');
imagegd($img, 'output.gd'); // 保存为GD格式
$gd_data = file_get_contents('output.gd');
$reloaded = imagecreatefromstring($gd_data); // 重新加载
?>

格式特点‌:

  • 无损原始数据

  • 仅限PHP环境使用

  • 文件体积大于PNG


六、imagegd2() - 输出GD2格式图像

语法结构

bool imagegd2(
    resource $image, 
    [mixed $to = null], 
    [int $chunk_size = 128], 
    [int $type = IMG_GD2_RAW]
)

参数说明

参数类型说明
$chunk_sizeint分块大小(像素)
$typeintIMG_GD2_RAW 或 IMG_GD2_COMPRESSED

示例代码

<?php
$img = imagecreatetruecolor(400, 300);
imagegd2($img, 'compressed.gd2', 64, IMG_GD2_COMPRESSED); // 分块压缩
?>

优化建议‌:

  • 大图像使用分块(如512px)

  • 网络传输用IMG_GD2_COMPRESSED


七、imagewebp() - 输出WebP图像

语法结构

bool imagewebp(
    resource $image, 
    [mixed $to = null], 
    [int $quality = 80]
)

示例代码

<?php
$img = imagecreatefrompng('transparent.png');
// 转换透明WebP
imagesavealpha($img, true);
imagewebp($img, 'output.webp', 85);
// 检测浏览器支持
if (strpos($_SERVER['HTTP_ACCEPT'], 'image/webp') !== false) {
    header('Content-Type: image/webp');
    imagewebp($img);
}
?>

现代Web优化‌:

  • 平均比JPEG小25-35%

  • 支持有损/无损压缩

  • 透明度支持需PHP 7.0+


图像输出函数综合比较表

函数名称输出格式压缩类型色彩支持透明度支持动画支持典型应用场景质量参数范围浏览器兼容性
imagepng()PNG无损压缩24位真彩色+Alpha通道8位Alpha通道网页图形/需要透明的LOGO0-9(压缩级)所有主流浏览器
imagejpeg()JPEG有损压缩24位色(YCbCr色彩空间)照片/需要小文件尺寸的网页图片0-100所有主流浏览器
imagegif()GIF无损压缩256色索引色1位布尔透明✔️简单动画/低复杂度图形所有主流浏览器
imagewbmp()WBMP无压缩1位黑白移动设备/WAP应用专用设备支持
imagegd()GD无压缩取决于创建时的色彩模式取决于源图像PHP内部图像处理中间态仅PHP环境可用
imagegd2()GD2分块存储同GD格式同GD格式大图像的部分加载处理仅PHP环境可用
imagewebp()WebP有损/无损24位色+Alpha通道8位Alpha通道✔️现代网页应用/高压缩比需求0-100Chrome/Firefox/Edge

关键特性补充说明

  1. 压缩效率对比‌:

    • WebP > JPEG ≈ PNG > GIF > GD/GD2 > WBMP

    • WebP相比PNG平均节省26%体积,相比JPEG节省25-34%

  2. 透明度实现差异‌:

    • PNG/WebP:支持半透明(Alpha混合)

    • GIF:仅支持完全透明/不透明

    • 其他格式:不支持透明度

  3. 特殊功能支持‌:

    • 渐进式加载:JPEG/PNG/WebP支持

    • 分块处理:仅GD2格式原生支持

    • 元数据保留:PNG/JPEG/WebP支持EXIF等元数据

  4. PHP版本要求‌:

    • WebP支持需PHP 5.4+

    • 动画WebP需PHP 7.1+

    • GD2分块处理需PHP 4.3+

  5. 内存消耗参考‌:

    plaintextCopy Code真彩色图像 > 索引色图像
    PNG处理 > JPEG处理 > GIF处理
    分块GD2处理可降低大图内存占用

建议根据具体需求选择格式:需要透明选PNG/WebP,照片选JPEG/WebP,动画选GIF/WebP,内部处理选GD/GD2。

标签: