Php中的gd库用得到吗,PHP中GD库的使用

1、生成带有文字的普通图片

//1、新建空白画布 创建一个真颜色(黑白)的图片

$width = $height = 200;$img = imagecreatetruecolor($width, $height);//2、选择一个颜色用于背景

$red = $green = $blue = 244;$bgc = imagecolorallocate($img, $red, $green, $blue);//3、将背景颜色填充到画布中,在(0,0)左上角填充

$x = $y = 0;

imagefill($img, $x, $y, $blue);//4、选择一个颜色用于字符

$cred = $cgreen = $cblue = 7;$color = imagecolorallocate($img, $cred, $cgreen, $cblue);//5、选择一个字符串在画布的(0,0)左上角进行绘制颜色为color

$cx = $cy = 0;$font = 5;//值为1-5

$str = ‘hello‘;//只能输入英文

imagestring($img, $font, $cx, $cy, $str, $color);//6、把生成好的图片保存

imagepng($img,‘image/1.png‘);//7、关闭画布

imagedestroy($img);

imagefill():将图片填充到画布中的操作类似于在画图工具中使用填充工具将颜色涂满画布,在哪里‘点击‘都可以,只不过在画布左上角(0,0)上填充最方便。

代码中所有有关颜色的参数都类似于Css中的rgb()属性,其属性值为0~255

结果如下:

20191113222015668485.png

2、生成复杂验证码图片(有线条和杂点)

//1、建立画布

$img = imagecreatetruecolor(‘200‘, ‘80‘);//2、生成并填充背景色

$bgc = imagecolorallocate($img, 220, 220, 200);

imagefill($img, 0, 0, $bgc);//3、用随机的颜色在随机的位置生成20条线段

for ($i = 0; $i < 20; $i++) {$x1 = mt_rand(0, 200);$y1 = mt_rand(0, 80);$x2 = mt_rand(0, 200);$y2 = mt_rand(0, 80);$red = mt_rand(0, 255);$green = mt_rand(0, 255);$blue = mt_rand(0, 255);$color = imagecolorallocate($img, $red, $green, $blue);

imageline($img, $x1, $y1, $x2, $y2, $color);

}//4、用随机的颜色在随机的位置生成100个像素点

for ($i = 0; $i < 100; $i++) {$x = mt_rand(0, 200);$y = mt_rand(0, 80);$color = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));

imagesetpixel($img, $x, $y, $color);//像素点小可以使用圆

}//5、用随机的颜色在随机的位置生成验证码文字

for ($i = 0; $i < 4; $i++) {$size = 80/2;//单位 px 大小为高度的一半

$angle = mt_rand(-30, 30);//水平x轴为0度

$x = $i * 200 / 4;$y = 80*3/4; //文字左下角为锚点(x,y) x平分画布的宽度,y为画布高度的3/4,

$color = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));$fontfile = __DIR__ . ‘/fonts/FZSTK.TTF‘;//字体文件的绝对路径(必须),文件大于3M为中文字体文件

$str = ‘qwertyuipasdfghjklzxcvbnmQWERTYUIPASDFGHJKLZXCVBNM123456789‘;$text = $str[mt_rand(0, strlen($str))];

imagettftext($img, $size, $angle, $x, $y, $color, $fontfile, $text);

}//6、保存

header("content-type:image/png");//网页内容为图片类型

imagepng($img);//只有第一个参数,不会保存但显示在页面。

//7、销毁

imagedestroy($img);

imagepng()有两个参数,第一个参数是处理过后的图片;第二个参数是图片存储的路径和文件名(非必需),两个参数都有即可保存图片,而只有第一个参数,图片不会保存,但可以立即显示在设备上,

不过要在显示前使用header()重新定义页面内容为图片格式,否则为文本格式会显示出一堆乱码。

结果如下:

20191113222015788594.png

3、给图片添加文字水印

$img = imagecreatefromjpeg(‘image/33.jpg‘);$width = imagesx($img);$height = imagesy($img);//2,计算文本的宽高

$text = ‘@轻点,疼‘;$fontfile = __DIR__ . ‘/fonts/FZSTK.TTF‘;//字体文件的绝对路径(必须),文件大于3M为中文字体文件

$textinfo = imagettfbbox(20, 0, $fontfile, $text);//返回一个含有8个字段的数组,每两个字段一组,为一个角的x,y;左下-右下-右上-左上

$twidth = $textinfo[2] - $textinfo[0];//文本宽

$theight = $textinfo[1] - $textinfo[5];//文本高

//3、将文本填充进图片右下角

$x = $width - $twidth;$y = $height;$color = imagecolorallocate($img, 255, 255, 255);

imagettftext($img, 20, 0, $x, $y, $color, $fontfile, $text);//4、查看并销毁

header(‘content-type:image/jpg‘);

imagejpeg($img);

imagedestroy($img);

代码中imagettfbbox()的参数分别为字体大小,角度,字体库文件和字符内容,其中角度以水平x轴为0度,字体库路径必须为绝对路径,如要使用中文,则必须导入中文字体库(一般大于3M)。函数返回值是一个

一维数组,如下所示:

20191113222015907727.png

结果如下:

20191113222016035649.png

4、将图片内容设为水印添加到其它图片

$src_im = imagecreatefromjpeg(‘image/22.jpg‘);//要拼接图片

$dst_x = 537;//从背景图片dst_im的(dst_x,$dst_y)处拼接

$dst_y = 358;$src_x = 64;//从src_im的(src_x,src_y)处获取宽为src_w,高为src_h的图片

$src_y = 370;$src_w = 153;$src_h = 148;//没有透明度

imagecopy($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h);//带有透明度

$dst_y-=200;$pct=50;//透明度 值为1~100 对应透明~不透明

imagecopymerge($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h,$pct);header(‘content-type:image/jpg‘);

imagejpeg($dst_im);

imagedestroy($dst_im);

imagedestroy($src_im);

结果如下:

20191113222016274891.png

5、将图片进行缩放并显示在原图上

$src_im = imagecreatefromjpeg(‘image/22.jpg‘);//要拼接图片

$dst_x = 537;//从背景图片dst_im的(dst_x,$dst_y)处拼接

$dst_y = 358;$src_x = 64;//从src_im的(src_x,src_y)处获取宽为src_w,高为src_h的图片

$src_y = 370;$src_w = 153;$src_h = 148;//缩放前的尺寸$dst_w=$dst_h=50;//缩放后的尺寸//1、imagecopyresampled 生成的图片质量更高,处理速度更慢并且占用一定的CPU资源。

imagecopyresampled($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y,$dst_w,$dst_h, $src_w, $src_h);//2、imagecopyresized 缩放图像的算法比较粗糙.处理速度快,只适合不要求清晰度但需要迅速生成缩略图的情况。

$dst_x+=100;

imagecopyresized($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y,$dst_w,$dst_h, $src_w, $src_h);header(‘content-type:image/jpg‘);

imagejpeg($dst_im);

imagedestroy($dst_im);

imagedestroy($src_im);

结果如下:

20191113222016442849.png

6、缩略图

//1、打开原图,获取宽,高

$img=imagecreatefromjpeg(‘image/11.jpg‘);$src_w=imagesx($img);$src_h=imagesy($img);//2、设置缩放比例,并创建空白画布

$scale=0.1;$dst_w=$src_w*$scale;$dst_h=$src_h*$scale;$dst_im=imagecreatetruecolor($dst_w,$dst_h);//3、将原图img的宽高缩放为(dst_w,dst_h)并放置到dst_im上。

imagecopyresampled($dst_im, $img, 0, 0, 0, 0,$dst_w,$dst_h, $src_w, $src_h);header(‘content-type:image/jpeg‘);

imagecopyresized($dst_im, $img, 0, 0, 0, 0,$dst_w,$dst_h, $src_w, $src_h);

imagejpeg($dst_im,‘image/resampled.jpg‘);//文件更小,更清晰

imagejpeg($dst_im,‘image/resized.jpg‘);

imagedestroy($dst_im);

imagedestroy($img);

结果如下:

20191113222016568818.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 基于MATLAB实现的有限差分法实验报告用MATLAB的有限差分法计算槽内电位;对比解析法和数值法的异同点;选取一点,绘制收敛曲线;总的三维电位图+使用说明文档 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细); 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可后台私信博主; 4.1 期刊或参考文献复现 4.2 Matlab程序定制 4.3 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 5、欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值