php之gd2

article/2025/9/27 6:16:03

一、使用gd2之前首先要开启gd2扩展
Windows下面找到php的配置文件php.ini,搜索extension=php_gd2.dll,去掉前面的分号即可;

函数介绍

由于gd2的函数比较的长,所有对部分函数进行介绍
1.imagecreatetruecolor — 新建一个真彩色图像

imagecreatetruecolor ( int $width , int $height ); //$width图像宽度 $height图像高度

返回值:成功返回图象资源,失败返回 FALSE 。
2.imagecolorallocate — 为一幅图像分配颜色

imagecolorallocate ( resource $image , int $red , int $green , int $blue );

返回值:分配失败则返回 -1。
3.imagecopyresampled — 重采样拷贝部分图像并调整大小

imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h );//$dst_image目标图象连接资源  $src_image源图象连接资源  $dst_x目标X坐标点  $dst_y目标Y坐标点  $src_x源的X坐标点  $src_y源的Y坐标点  $dst_w目标宽度  $dst_h目标高度  $src_w源图象的宽度  $src_h源图象的高度

返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。
4.imagecopymerge — 拷贝并合并图像的一部分

imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct );//将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100

5.imagejpeg —将图像输出到浏览器或文件

imagejpeg ( resource $image [, string $filename [, int $quality ]] );//从 image 图像以 filename 为文件名创建一个 JPEG 图像。

返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。
6.imagecolorallocatealpha — 为一幅图像分配颜色和透明度

imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha );//透明度参数alpha,其值从0到127。0 表示完全不透明,127 表示完全透明

返回值:颜色标识符或FALSE分配失败。此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值。
7.imagettftext — 用TrueType字体向图像写入文本

imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text );//$image画布资源  $size字体大小  $angle旋转角度  $x x轴  $y y轴  $color字体颜色 $fontfile字体文件  $text需要渲染的字符串

返回值:返回一个含有 8 个单元的数组表示了文本外框的四个角,顺序为坐下角,右下角,右上角,左上角。这些点是相对于文本的而和角度无关,因此“左上角”指的是以水平方向看文字时其左上角。
8.imagefill — 区域填充

imagefill ( resource $image , int $x , int $y , int $color );//在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)

9.imagesetpixel — 画一个单一像素

imagesetpixel ( resource $image , int $x , int $y , int $color );//在 image 图像中用 color 颜色在 x,y 坐标(图像左上角为 0,0)上画一个点

10.imageline — 画一条线段

imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color );// color 颜色在图像 image 中从坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)画一条线段

11.imagestring — 水平地画一行字符串

imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col );//用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体

12.imagedestroy — 销毁一图像

imagedestroy ( resource $image );

实际应用

一、生成验证码

//向浏览器输出图片头信息
header('Content-type:image/jpeg');
$width = 130;
$height = 50;
$arr = array('1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
$string = '';
for ($i = 0; $i < 5; $i++) {$string .= $arr[rand(0,count($arr)-1)];
}
//新建一个真彩色图像
$img = imagecreatetruecolor($width, $height);
//为一幅图像分配颜色  
$bgColor = imagecolorallocate($img, rand(200,255), rand(200,255), rand(200,255));
//区域填充
imagefill($img, 0, 0, $bgColor);
//该循环,循环画背景干扰的点
for ($i = 0; $i <= 100; $i++) {//点的颜色$pointColor = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));//水平的画一串像素点imagesetpixel($img, rand(0,$width-1), rand(0,$height-1), $pointColor);
}
//该循环,循环画干扰直线
for ($i = 0; $i <= 4; $i++) {//线的颜色$lineColor = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));//画一条线段imageline($img, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height), $lineColor);
}
$colorString = imagecolorallocate($img, rand(10,100), rand(10,100), rand(10,100));
//1.用TrueType字体向图像写入文本
imagettftext($img,25,7,rand(30,40),rand(35,40),$colorString,'simsun.ttc',$string);
//2.水平地画一行字符串(5是最大的)
//imagestring($img,5,rand(0,$width-36),rand(0,$height-15),$string,$colorString);
//输出图片到浏览器
imagejpeg($img);
//销毁,释放资源
imagedestroy($img);

ps:事先要下载simsun.ttc文件到本地(在win里搜索 字体 就行)。

二、添加文字水印
先准备图片:
在这里插入图片描述
直接上代码:

//要添加文字水印的图片
$srcImg = 'example.jpg';
//如果是某某云的资源链接就用 file_get_contents()先下载到本地再操作
//获取图片信息
$imageInfo = getimagesize($srcImg);
//通过编号获取图像类型
$type = image_type_to_extension($imageInfo[2], false);
//在内存中创建和图像类型一样的图像
$fun = "imagecreatefrom" . $type;
//图片复制到内存
$image = $fun($srcImg);
//设置字体的路径
$font = "simsun.ttc";
//填写水印内容
$content = "武汉加油!";
$text = '中国加油!';
//设置字体颜色和透明度
$color = imagecolorallocatealpha($image, 50, 50, 50, 0);
//写入文字
imagettftext($image, 50, 0, 130, 250, $color, $font, $content);
imagettftext($image, 40, 0, 140, 350, $color, $font, $text);
//浏览器输出
header("Content-type:".$imageInfo['mime']);   //******
$fun = "image" . $type;
//在浏览器中输出图片
$fun($image);  //******
//添加水印之后的图片  图片路径名称
$imgPathName = 'newImage.png';
//保存图片
$fun($image, $imgPathName); 
//销毁图片
imagedestroy($image);

ps:如果不想在浏览器输出就注释带//******的两行
效果:
在这里插入图片描述

三、添加logo水印
先准备材料:
在这里插入图片描述
直接上代码:

/**操作背景图片**/
//背景图片路径
$src = "example.jpg";
//获取图片信息
$info = getimagesize($src);
//通过图片的编号获取获取图片的类型
$type = image_type_to_extension($info[2],false);
//在内存中创建一个和我们图像类型一样的图像
$fun = "imagecreatefrom{$type}";
//把要操作的图片复制到内存中
$image = $fun($src);/**操作logo**/
//水印路径
$logoImage = "logo.png";
//获取水印图片的类型
$logoInfo = getimagesize($logoImage);
//通过水印图片的编号获取水印图片的类型
$logoType = image_type_to_extension($logoInfo[2],false);
//在内存中创建一个和水印图片一样的图像
$logoFun = "imagecreatefrom{$logoType}";
//把水印图片复制到内存中
$logo = $logoFun($logoImage);//将两张图片拷贝到一起
imagecopymerge($image, $logo, 300, 280, 0, 0, $logoInfo[0], $logoInfo[1],70);
//销毁水印图片
imagedestroy($logo);
//在浏览器中输出图片
header("Content-Type:".$info['mime']);
$newImgFun = "image{$type}";
$newImgFun($image);
//保存图片
$newImgFun($image,'newImage.jpg'); 
//销毁图片
imagedestroy($image);

效果:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/3CFomGhu.shtml

相关文章

【GD32】GD32工程打开后报错

GD32工程打开后报错&#xff0c;Third Party Device Support for xxxxx 解决办法&#xff1a;修改工程后缀

GD32硬件IIC

GD32E230硬件IIC 我们熟悉IIC都是使用软件代码的形式模拟时序图来编程 现在使用GD32E230中的HAL库中硬件IIC模式IIC。的总线机制都是一种两线接口、简单、双向二线制同步的串行总线&#xff0c;二线制就是时钟线(SCL)和数据线(SDA)两个信号线。IIC寻址时分为主从设备之分&#…

GD32学习

1.简介 关于兆易创新GD32的产品&#xff0c;目前在单片机MCU的业务上&#xff0c;GD全部是32bit的单片机&#xff0c;目前GD32的单片机从内核上区分有Cortex-M3、Cortex-M4、Cortex-M23三个系列&#xff0c;其中红色框框为主推系列&#xff1a; 开发调试环境&#xff1a; 支持主…

了解GD2函数库

PHP目前在Web开发领域已经被广泛应用&#xff0c;PHP不仅可以生成HTML页面&#xff0c;而且可以创建和操作二进制形式的数据&#xff0c;如图像&#xff0c;文件等。其中使用PHP操作图形可以通过GD2函数库来实现。利用GD2函数库可以在页面中绘制各种图像&#xff0c;统计图&…

GDKOI2023 D2T1

前言 相比于D1T1&#xff0c;这题才是真正的签到题&#xff0c;然而&#xff0c;我却爆0了。为了纪念这悲壮的0分&#xff0c;写下了这篇题解。 题目大意 给出 n ( 1 ≤ n ≤ 1 0 5 ) n(1\le n\le 10^5) n(1≤n≤105) 个字符串及其出现时间&#xff08;以几点几分给出&…

一文看懂 GD2库

文章目录 一、 GD2简介1、 验证码&#xff08;实际上是一个img&#xff09; 二、 GD2库使用步骤2.1添加扩展2.2修改php配置文件2.3重启服务 三、 GD2里面的常用方法3.1 imagecreate3.2 imagecolorallocate3.3 imagefill3.4 输出图像资源3.5创建真彩画布3.6在图像中写文字3.6.1i…

MySQL的主从复制

MySQL的主从复制 目录 为什么需要主从复制&#xff1f;MySQL 主从复制概念MySQL 主从复制主要用途MySQL主从形式 一主一从一主多从&#xff0c;提高系统的读性能多主一从 &#xff08;从5.7开始支持&#xff09;双主复制级联复制 MySQL 主从复制原理MySQL主从复制的过程MySQL…

redis主从结构 (一主一从,一主多从,主从从)

关闭防火墙和selinux systemctl disable firewalld.service systemctl stop firewalld vim /etc/selinux/config sed -n 7p /etc/selinux/config SELINUXdisabled setenforce 0 从服务器首次做的是全量同步&#xff0c;且同步的数据会覆盖本机的数据 master 192.168.…

Mysql主从模式

文章目录 &#x1f449;&#x1f3fb;前言❤️主从模式说明&#x1f90d;logbin日志&#x1f90d;Mysql主从复制的流程&#x1f90d;主从复制中遇到的问题 ❤️主从模式配置&#x1f90d;Master配置&#x1f90d;Slave配置 ❤️其他设置&#x1f90d;半同步复制&#x1f90d;并…

mysql主从同步

目录 1.创建主从同步用户 2.授予主从同步权限 3.刷新权限 4.修改master配置文件 5.重启MySQL 6.查看master的状态 7.修改slave配置文件 8.重启mysql 9.构建主从连接信息 10.开始同步 11.查看同步信息 12.同步失败 13.同步报错 13.1 server_id冲突 13.2 initiali…

mysql主从原理

目录 一、主从复制原理 1.原理 2.也就是说 3.注意 随着访问量的不断增多&#xff0c;mysql数据库的压力不断增加&#xff0c;需要对mysql进行优化和架构改造&#xff0c;可以使用高可用、主从复制、读写分离、拆分库、拆分表进行优化。下面我们来学习mysql主从复制高可用如…

MySQL主从复制

一、MySQL主从复制原理 在实际的生产中&#xff0c;为了解决Mysql的单点故障已经提高MySQL的整体服务性能&#xff0c;一般都会采用「主从复制」。 比如&#xff1a;在复杂的业务系统中&#xff0c;有一句sql执行后导致锁表&#xff0c;并且这条sql的的执行时间有比较长&…

Mysql主从同步配置

1. mysql主从同步定义 主从同步使得数据可以从一个数据库服务器复制到其他服务器上&#xff0c;在复制数据时&#xff0c;一个服务器充当主服务器&#xff08;master&#xff09;&#xff0c;其余的服务器充当从服务器&#xff08;slave&#xff09;。因为复制是异步进行的&am…

MySQL 的主从架构

数据库主从概念、优点及用途 主从数据库中主是主库的意思&#xff0c;从是从库的意思。数据库主库对外提供读写操作&#xff0c;从库对外提供读操作。 数据库为什么需要主从架构呢&#xff1f; 高可用&#xff0c;实时灾备&#xff0c;用于故障切换。比如主库挂了&#xff0c…

MySQL主从同步(一主一从、一主多从、主从从)等结构的概述与配置

前言&#xff1a;前面我们了解了MySQL数据库的基础知识&#xff0c;今天及接下来的五天时间里我会给大家带来MySQL进阶方面的一些学习总结&#xff0c;如有不足&#xff0c;还请大家留言指出&#xff1b;下面我们就开始今天的内容。 ** 部署mysql主从同步结构 **  主从同步…

MySQL的主从

前言 金三银四面试的时候&#xff0c;面试官经常会问MySQL主从。今天就跟大家聊聊MySQL的主从。 数据库主从概念、优点、用途 数据库主从复制原理 主主、主从、主备的区别 MySQL是怎么保证主从一致的 数据库主从延迟的原因与解决方案 聊聊数据库的高可用方案 1. 数据库…

主从原理,一主多从架构

主从架构总结 主从原理 用binlog做主从&#xff0c;redolog只支持innodb 过程 ①start slave后从库启动io线程连接主库&#xff0c;请求读日志②dump线程根据请求信息读取指定位置后的日志③完成后就响应成功&#xff0c;没有确认机制④IO线程收到信息&#xff0c;将受到的日…

主从复制:主从复制的概述、一主一从架构搭建主从复制的原理、同步数据一致性问题

文章目录 1. 主从复制的概述1.1 如何提升数据库的并发能力1.2 主从复制的作用 2. 主从复制的原理2.1 原理剖析2.2 复制的最大问题2.3 复制的基本原则 3. 一主一从架构搭建3.1 准备工作3.2 主机配置文件3.3 从机配置文件3.4 建立账户并授权3.5 配置需要复制的主机3.6 测试3.7 停…

c/c++经典面试题(高频考点)

一、数据结构及算法&#xff08;快排、归并、堆排等&#xff09; 十大排序算法 数据结构(c/c版)-严蔚敏 数据结构与算法(思维导图&#xff09; E:\学习\4.数据结构(C语言版)].严蔚敏_吴伟民.扫描版.pdf 数据结构分为8类有:数组、栈、队列、链表、树、散列表、堆、图 1.快速排…

吐血整理 | 最常见的 C/C++ 面试题(含答案)

大家好&#xff0c;我是 K 哥&#xff01; 最近群里有小伙伴想跳槽&#xff0c;问我有没有常见的 C/C 面试题。这不正好&#xff0c;K 哥之前整理了一份 PDF&#xff0c;里面包含了各种经典的 C/C 题目&#xff0c;当然更重要的是还附带了非常详细的答案。 K 哥不仅面试之前会反…