一、PHP图片处理基础

1.1 GD库简介

GD库是PHP中用于处理图像的常用扩展,支持多种图像格式的创建、编辑和保存。要使用GD库,首先确保你的PHP环境中已安装并启用该扩展。

1.2 Imagick扩展简介

Imagick是另一个强大的图像处理扩展,基于ImageMagick工具集,提供了更为丰富的图像处理功能。与GD库相比,Imagick在处理大型图像和复杂操作时表现更为出色。

二、使用GD库进行图片格式转换

2.1 安装和配置

确保PHP环境中已安装GD库。可以通过phpinfo()函数检查GD库是否启用。

2.2 基本转换示例

<?php
// 输入文件和输出文件
$input = 'input.bmp';
$output = 'output.jpg';

// 创建图像资源
$image = imagecreatefromwbmp($input);

// 保存为JPEG格式
imagejpeg($image, $output);

// 释放图像资源
imagedestroy($image);

// 删除原始文件(可选)
unlink($input);
?>

2.3 批量转换示例

<?php
$directory = 'path/to/images';
$files = scandir($directory);

foreach ($files as $file) {
    $filePath = $directory . '/' . $file;
    $outputPath = $directory . '/' . pathinfo($file, PATHINFO_FILENAME) . '.jpg';

    if (pathinfo($file, PATHINFO_EXTENSION) === 'bmp') {
        $image = imagecreatefromwbmp($filePath);
        imagejpeg($image, $outputPath);
        imagedestroy($image);
        unlink($filePath);
    }
}
?>

三、使用Imagick进行图片格式转换

3.1 安装和配置

确保PHP环境中已安装Imagick扩展。可以通过phpinfo()函数检查Imagick是否启用。

3.2 基本转换示例

<?php
// 输入文件和输出文件
$input = 'input.png';
$output = 'output.jpg';

// 创建Imagick对象
$image = new Imagick($input);

// 设置输出格式
$image->setImageFormat('jpeg');

// 保存图像
$image->writeImage($output);

// 清理资源
$image->clear();
$image->destroy();
?>

3.3 批量转换示例

使用Imagick进行批量转换同样简单高效:

<?php
$directory = 'path/to/images';
$files = scandir($directory);

foreach ($files as $file) {
    $filePath = $directory . '/' . $file;
    $outputPath = $directory . '/' . pathinfo($file, PATHINFO_FILENAME) . '.jpg';

    if (pathinfo($file, PATHINFO_EXTENSION) === 'png') {
        $image = new Imagick($filePath);
        $image->setImageFormat('jpeg');
        $image->writeImage($outputPath);
        $image->clear();
        $image->destroy();
    }
}
?>

四、高级功能与应用

4.1 添加水印

<?php
// 主图像和水印图像
$mainImage = 'main.jpg';
$watermark = 'watermark.png';

// 创建图像资源
$main = imagecreatefromjpeg($mainImage);
$watermark = imagecreatefrompng($watermark);

// 获取图像尺寸
$mainWidth = imagesx($main);
$mainHeight = imagesy($main);
$watermarkWidth = imagesx($watermark);
$watermarkHeight = imagesy($watermark);

// 设置水印位置
$x = $mainWidth - $watermarkWidth - 10;
$y = $mainHeight - $watermarkHeight - 10;

// 合并图像
imagecopy($main, $watermark, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight);

// 保存图像
imagejpeg($main, 'output.jpg');

// 释放资源
imagedestroy($main);
imagedestroy($watermark);
?>

4.2 调整图像大小

调整图像大小是另一个常见需求,以下是一个使用Imagick调整图像大小的示例:

<?php
// 输入文件和输出文件
$input = 'input.jpg';
$output = 'output.jpg';

// 创建Imagick对象
$image = new Imagick($input);

// 设置新尺寸
$image->resizeImage(800, 600, Imagick::FILTER_LANCZOS, 1);

// 保存图像
$image->writeImage($output);

// 清理资源
$image->clear();
$image->destroy();
?>

五、总结