1. 准备工作

在开始之前,确保你的PHP环境中已经安装了GD库,因为GD库是处理图像的重要组件。

2. 读取二进制流图片

// 指定图片文件路径
$imagePath = 'path/to/your/image.jpg';

// 检查文件是否存在
if (!file_exists($imagePath)) {
    die('Error: 图片文件不存在');
}

// 读取图片文件内容
$imageData = file_get_contents($imagePath);

// 检查是否读取成功
if ($imageData === false) {
    die('Error: 无法读取图片文件');
}

3. 创建图片资源

接下来,使用GD库创建一个图像资源:

// 检查图片格式
$imageType = exif_imagetype($imagePath);

// 根据图片格式创建相应的图像资源
switch ($imageType) {
    case IMAGETYPE_JPEG:
        $imageResource = imagecreatefromjpeg($imagePath);
        break;
    case IMAGETYPE_PNG:
        $imageResource = imagecreatefrompng($imagePath);
        break;
    case IMAGETYPE_GIF:
        $imageResource = imagecreatefromgif($imagePath);
        break;
    default:
        die('Error: 不支持的图片格式');
}

// 检查是否成功创建图像资源
if ($imageResource === false) {
    die('Error: 无法创建图像资源');
}

4. 显示图片

// 输出内容类型
header('Content-Type: image/jpeg'); // 根据实际图片格式修改

// 输出图像
imagepng($imageResource);

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

5. 从数据库读取图片

// 连接到数据库
$db = new PDO('mysql:host=your_host;dbname=your_db', 'username', 'password');

// 准备SQL查询
$stmt = $db->prepare('SELECT image_data FROM images WHERE id = :id');

// 绑定参数
$stmt->bindParam(':id', $imageId);

// 执行查询
$stmt->execute();

// 获取图片数据
$imageData = $stmt->fetch(PDO::FETCH_ASSOC);

// 检查是否获取到数据
if (!$imageData) {
    die('Error: 图片数据未找到');
}

// 创建图像资源
$imageResource = imagecreatefromstring($imageData['image_data']);

// 输出内容类型
header('Content-Type: image/jpeg'); // 根据实际图片格式修改

// 输出图像
imagepng($imageResource);

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

6. 总结