当前位置: 首页 > article >正文

PHP和GD库如何将图片转换为黑白图

在PHP中,使用GD库将图片转换为黑白(灰度)图像是一个常见的图像处理任务。以下是一个基本的步骤说明和示例代码,展示了如何使用PHP和GD库来实现这一功能:

  1. 加载原始图像
    • 使用imagecreatefromjpeg()imagecreatefrompng()imagecreatefromgif()等函数根据图像格式加载原始图像。
  2. 创建灰度图像资源
    • 使用imagecreatetruecolor()函数创建一个与原始图像相同大小的真彩色图像资源,用于存储灰度图像。
  3. 遍历每个像素并转换为灰度
    • 使用imagecopyresampled()imagecopy()(如果不需要重新采样)将原始图像复制到灰度图像资源上。
    • 遍历灰度图像资源中的每个像素,使用灰度公式将其转换为灰度值。
    • 在GD库中,虽然没有直接的函数来遍历每个像素并应用灰度转换,但可以通过imagefilter()函数使用内置的IMG_FILTER_GRAYSCALE滤镜来实现这一效果。
  4. 输出或保存灰度图像
    • 使用imagepng()imagejpeg()等函数将灰度图像输出到浏览器或保存为文件。
  5. 释放内存
    • 使用imagedestroy()函数销毁图像资源,释放内存。

以下是一个示例代码,展示了如何使用PHP和GD库将图片转换为黑白(灰度)图像:

<?php
// 加载原始图像
$imageFile = 'input_image.jpg'; // 输入图像文件路径
$sourceImage = imagecreatefromjpeg($imageFile);

// 检查图像是否加载成功
if (!$sourceImage) {
    die('Failed to load image.');
}

// 创建灰度图像资源(与原始图像相同大小)
$grayImage = imagecreatetruecolor(imagesx($sourceImage), imagesy($sourceImage));

// 将原始图像复制到灰度图像资源上,并应用灰度滤镜
imagecopy($grayImage, $sourceImage, 0, 0, 0, 0, imagesx($sourceImage), imagesy($sourceImage));
imagefilter($grayImage, IMG_FILTER_GRAYSCALE);

// 输出灰度图像到浏览器(作为PNG格式)
header('Content-Type: image/png');
imagepng($grayImage);

// 或者将灰度图像保存为文件
// imagepng($grayImage, 'output_image_gray.png');

// 释放内存
imagedestroy($sourceImage);
imagedestroy($grayImage);
?>

在这个示例中,我们首先加载了一张名为input_image.jpg的JPEG图像。然后,我们创建了一个与原始图像相同大小的真彩色图像资源$grayImage。接着,我们使用imagecopy()函数将原始图像复制到灰度图像资源上,并使用imagefilter()函数和IMG_FILTER_GRAYSCALE滤镜将其转换为灰度图像。最后,我们将灰度图像输出到浏览器(作为PNG格式),并释放了内存。

注意:在输出图像之前,我们使用header()函数设置了正确的Content-Type,以便浏览器能够正确解析图像格式。如果你希望将灰度图像保存为文件而不是输出到浏览器,可以取消注释imagepng($grayImage, 'output_image_gray.png');这行代码,并注释掉imagepng($grayImage);


http://www.kler.cn/a/430184.html

相关文章:

  • 10_Redis数据结构-HyperLogLog基数统计
  • Python教程丨Python环境搭建 (含IDE安装)——保姆级教程!
  • OpenAI 故障复盘 - 阿里云容器服务与可观测产品如何保障大规模 K8s 集群稳定性
  • MFC读写文件实例
  • H5通过URL Scheme唤醒手机地图APP
  • 《繁星路》V1.8.3(Build16632266)官方中文学习版
  • Unity类银河战士恶魔城学习总结(P167 Blackhole additional vfx 黑洞技能额外特效)
  • 2023年第十四届蓝桥杯Scratch02月stema选拔赛真题-王子与骑士
  • 第三十九篇——条件概率和贝叶斯公式:机器翻译是怎么工作的?
  • 执行“go mod tidy”遇到“misbehavior”错误
  • 2024年华中杯数学建模C题基于光纤传感器的平面曲线重建算法建模解题全过程文档及程序
  • 【算法笔记】前缀和算法原理深度剖析(超全详细版)
  • gozero项目迁移与新服务器环境配置,包含服务器安装包括go版本,Nginx,项目配置包括Mysql,redis,rabbit,域名
  • 使用 Postman 上传二进制类型的图片到后端接口写法
  • 通俗易懂理解:网络安全恶意节点的检测与哨兵节点的激活【论文+代码】
  • 杨振宁大学物理视频中黄色的字,c#写程序去掉
  • net8 WebAP Swagger
  • JS中的原型链与继承
  • PyTorch张量的backward方法和.grad属性介绍
  • 鸿蒙Next开发实战教程-使用WebSocket实现即时聊天
  • 如何实现多级缓存以及缓存之间数据的一致性
  • vscode鼠标右键跳转到定义只能跳转到头文件
  • C++ 列表初始化(initializer_list)
  • Go validator验证参数是否零值以及是否传递
  • IDEA创建Spring Boot项目配置阿里云Spring Initializr Server URL【详细教程-轻松学会】
  • IO进程学习笔记