GD库常用实例

一、图片水印

1、实现步骤

  1. 打开原图(也叫操作的目标图片)
  2. 打开水印图(也叫水印来源图片)
  3. 使用 imagecopymerge 将小图合并至大图的指定位置
  4. 输出图片
  5. 销毁资源

2、实例代码

$dst_path = 'image/meinv.jpg';
$dst = imagecreatefromstring(file_get_contents($dst_path)); $logo_path = 'image/jack.jpg'; $logo = imagecreatefromstring(file_get_contents($logo_path)); list($dst_width,$dst_height) = getimagesize($dst_path); list($logo_width,$logo_height) = getimagesize($logo_path); $dst_x = $dst_width - $logo_width; $dst_y = $dst_height - $logo_height; //要将图片加在右下脚
imagecopymerge($dst, $logo, $dst_x, $dst_y, 0, 0, $logo_width, $logo_height, 50); header('Content-type:image/png'); imagepng($dst); imagedestroy($dst);

二、文字水印

/**
* imagecolorallocatealpha() 的行为和 imagecolorallocate() 相同,
* 但多了一个额外的透明度参数 alpha,其值从 0 到 127。0 表示完全不透明,127 表示完全透明。
*/
$filename = 'image/meinv.jpg';
$fileinfo = getimagesize($filename); list( $width, $height ) = $fileinfo; $mime = $fileinfo['mime']; $createFrom = str_replace('/','createfrom',$mime);
$outFun = str_replace('/','',$mime); $image = $createFrom($filename); //设置字体
$font = 'C:\Windows\Fonts\msyh.ttc';//建议使用绝对路径
imagettftext($image, 30, 0, 0,ceil(($height-30)/2), $color, $font, 'Jack喜欢的妞');
header('content-type:'.$mime);
$outFun($image);
imagedestroy($image);

三、验证码

function createCheckCode( $codeNum ){    $code="23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ";
$string='';
//从字符串中取出随机的字符
for($i=0; $i < $codeNum; $i++){
$char=$code{mt_rand(0, strlen($code)-1)};
$string.=$char;
}
//返回字符内容
return $string;
} $width = 100;
$height = 30; # 准备画布
$image = imagecreatetruecolor($width, $height); # 准备颜色
$color_dan = imagecolorallocate($image, 200, 200, 200);
$color_shen = imagecolorallocate($image, 2, 2, 2); # 填充背景颜色
imagefilledrectangle($image, 0, 0, $width, $height, $color_dan); # 将字符写入画布
$str = createCheckCode(4); for ($i = 0; $i < 4; $i++) {
$pj = 100/4;
$startx = $i*$pj + 10;
$starty = rand(0, 30-15);
imagechar($image, 7, $startx, $starty, $str{$i}, $color_shen);
} for ($i = 0; $i < 100; $i++) {
imagesetpixel($image, mt_rand(0, 100), mt_rand(0, 30), $color_shen);
}
# 告诉浏览器你弄了一个啥
header('Content-Type:image/png'); # 以 PNG 格式将图像输出到浏览器或文件
imagepng($image); # 销毁 节省内存
imagedestroy($image);

四、图片缩放

  1. 打开来源图片
  2. 设置图片缩放百分比(缩放)
  3. 获得来源图片,按比调整大小
  4. 新建一个指定大小的图片为目标图
  5. 将来源图调整后的大小放到目标中
  6. 销毁资源
$src_path = 'image/meinv.jpg';
$src_image = imagecreatefromstring(file_get_contents($src_path)); list( $src_w, $src_h ) = getimagesize($src_path); $p = 0.3; $new_width = $src_w * $p;
$new_height = $src_h * $p; $new_image = imagecreatetruecolor($new_width, $new_height); imagecopyresampled($new_image, $src_image, 0, 0, 0, 0, $new_width, $new_height, $src_w, $src_h); header('content-type:image/jpeg');
imagejpeg($new_image);

五、验证码类

$char=array_merge(range('a','z'),range('A','Z'),range(1,9));

<?php
//验证码类
class ValidateCode {
private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子
private $code;//验证码
private $codelen ;//验证码长度
private $width;//宽度
private $height;//高度
private $img;//图形资源句柄
private $font;//指定的字体格式
private $fontsize;//指定字体大小
private $fontcolor;//指定字体颜色
//构造方法初始化
public function __construct($codelen=4,$width=130,$height=50,$fontsize=20) {
//dirname()返回路径中的目录部分,__FILE__ 文件的完整路径和文件名
$this->codelen=$codelen;
$this->width=$width;
$this->height=$height;
$this->fontsize=$fontsize;
$this->font = 'C:\Windows\Fonts\msyh.ttc';//注意字体路径要写对,否则显示不了图片
}
//生成随机码
private function createCode() {
$_len = strlen($this->charset)-1;
for ($i=0;$i<$this->codelen;$i++) {
$this->code .= $this->charset[mt_rand(0,$_len)];
}
}
//生成背景
private function createBg() {
//新建一个真彩色图像
$this->img = imagecreatetruecolor($this->width, $this->height);
//为一幅图像分配颜色
$color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
//画一矩形并填充
imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);
} //生成文字
private function createFont() {
$_x = $this->width / $this->codelen;
for ($i=0;$i<$this->codelen;$i++) {
$this->fontcolor = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imagettftext($this->img,$this->fontsize,mt_rand(-20,20),$_x*$i+mt_rand(10,20),mt_rand($this->fontsize+5,$this->height-5),$this->fontcolor,$this->font,$this->code[$i]);
}
}
//生成线条、雪花
private function createLine() {
//线条
for ($i=0;$i<6;$i++) {
$color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
}
//雪花
for ($i=0;$i<100;$i++) {
$color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);
}
}
//输出
private function outPut() {
header('Content-type:image/png');
imagepng($this->img);
imagedestroy($this->img);
}
//对外生成
public function doimg() {
$this->createBg();
$this->createCode();
$this->createLine();
$this->createFont();
$this->outPut();
}
//获取验证码
public function getCode() {
return strtolower($this->code);
}
}
//用法
//$p=new ValidateCode(5,250,60,30);
//$p->doimg();
?>

GD库常用实例的更多相关文章

  1. GD库常用函数

    创建句柄 imagecreate($width, $height)                                                  //新建图像 imagecreat ...

  2. PHP的GD库

    GD库 PHP通过GD库,可以对JPG.PNG.GIF.SWF等图片进行处理.GD库常用在图片加水印,验证码生成等方面. 绘制线条 要对图形进行操作,首先要新建一个画布,通过imagecreatetr ...

  3. php 安装扩展插件实例-gd库

    今天给php 安装一个扩展插件 gd库   一.gd库是什么 gd库是一个开源的图像处理库,它通过提供一系列用来处理图片的API,使其可以用来创建图表.图形.缩略图以及其他图像的处理操作. gd库支持 ...

  4. 使用SharePoint Designer定制开发专家库系统实例!

    将近大半年都没有更新博客了,趁这段时间不忙,后续会继续分享一些技术和实际应用.对于Sharepoint的定制开发有很多种方式,对于一般的应用系统,可以使用Sharepoint本身自带的功能,如列表作为 ...

  5. 安装GD库解决ThinkPHP 验证码Call to undefined function Think\imagecreate()出错

    在php中imagecreate函数是一个图形处理函数,主要用于新建一个基于调色板的图像了,然后在这个基础上我们可以创建一些图形数字字符之类的,但这个函数需要GD库支持,如果没有开启GD库使用时会提示 ...

  6. GD库使用小结---1

    因为一开始,“大家”都说一般任务中,用php操作图片不常见,像我们这种基本业务型的,就更用不到了,所以先别看,偶就没有看.现在有机会了自然要来玩一把. 以前学过C#的GDI+,交了课程设计后忘得一干二 ...

  7. PHP5 GD库生成图形验证码(汉字)

    PHP5 GD库生成图形验证码且带有汉字的实例分享. 1,利用GD库函数生成图片,并在图片上写指定字符imagecreatetruecolor 新建一个真彩色图像imagecolorallocate ...

  8. GD库知识点

    GD库:PHP的一个扩展库,主要用于绘制动态图,根据数据动态响应的图片 如统计图 验证码 其他的用途如:处理已有图像 图片的缩放 裁剪 图片水印 文字水印 1.安装GD库 2.画图步骤:创建背景图像( ...

  9. PHP 使用GD 库绘制图像,无法显示的问题

    根据官方GD 库绘制图像文档样式 原基本样式 $width = 120; $height = 50; $img = @imagecreatetruecolor($width, $height) or ...

  10. 【PHP】使用GD库实现 图像生成、缩放、logo水印和简单验证码

    gd库是php最常用的图片处理库之一(另外一个是imagemagick),可以生成图片.验证码.水印.缩略图等等.要使用gd库首先需要开启gd库扩展, windows系统下需要在php.ini中将ex ...

随机推荐

  1. 【每日一题】36. 小AA的数列 (二进制DP)

    补题链接:Here 算法涉及:位运算,DP 这道题想了很久但实在没想什么巧妙的解法,暴力的代码就不放,这里引用Kur1su 的思路 异或问题优先考虑二进制位,对于这个问题,我们需要考虑偶数长度的区间, ...

  2. vue学习笔记 十五、组件挂载过程及query方式带参数的页面跳转

    系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...

  3. Node版本升级和降级

    https://blog.csdn.net/qq_29262849/article/details/52973095

  4. SpringMVC的特性及应用

    Spring MVC特点 清晰地角色划分 灵活的配置功能 提供了大量的控制器接口和实现类 真正的View层实现无关(JSP.Velocity.Xslt等) 国际化支持 面向接口编程 Spring提供了 ...

  5. 搭建 spring boot + mybatis plus 项目框架并进行调试

    本文为博主原创,未经允许不得转载: 1.创建一个spring boot的工程应用: File ---- > New ----->Project ----> 然后选中Spring In ...

  6. Python注释是什么东东

    注释 标注解释,目的是帮助读者理解的文本 也就是说,注释首先是文本,其二是说明,其三是思路,其四是例子注释有两种形式 1. # ... 单行注释 用于对某句语句或语句块进行解释 放在语句块的头行或一个 ...

  7. K8s集群CoreDNS监控告警最佳实践

    本文分享自华为云社区<K8s集群CoreDNS监控告警最佳实践>,作者:可以交个朋友. 一 背景 coreDNS作为K8s集群中的关键组成部分.主要负责k8s集群中的服务发现,域名解析等功 ...

  8. [转帖]【MySQL 8】MySQL 5.7都即将停只维护了,是时候学习一波MySQL 8了!

    https://juejin.cn/post/7111255789876019208 MySQL 8新特性 选择MySQL 8的背景:MySQL 5.6已经停止版本更新了,对于 MySQL 5.7 版 ...

  9. [转帖]grafana配置邮件发送

    grafana的邮件配置文件是/etc/grafana/grafana.ini,新建grafana.ini文件,内容如下. chown 472:472 grafana.ini ############ ...

  10. [转帖]Kafka高可用 — KRaft集群搭建

    Apache Kafka Raft 是一种共识协议,它的引入是为了消除 Kafka 对 ZooKeeper 的元数据管理的依赖,被社区称之为 Kafka Raft metadata mode,简称 K ...