首页 > 后端开发 > php教程 > php生成验证码,缩略图及水印图的类实例详解

php生成验证码,缩略图及水印图的类实例详解

墨辰丷
发布: 2023-03-29 16:34:01
原创
1260 人浏览过

这篇文章主要给大家分享的是php生成验证码,缩略图,及水印图的类,十分的实用,有需要的小伙伴可以参考下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

<?php

class image{

  session_start();

  //验证码类

  static public function verify($code,$width=75,$height=25,$n=4){

    header("content-type:image/png");

    // 创建画布

    $img=imagecreatetruecolor($width,$height);

    // 设置背景色

    $bgcolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),rand(200,255));

    // 将背景色填充

    imagefill($img,0,0,$bgcolor);

    // 绘制五条弧线

    for($i=0;$i<5;$i++){

      $arccolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),rand(200,255));

      imagearc($img,mt_rand(5,($width-5)),mt_rand(5,($height-5)),mt_rand(5,($width-5)),mt_rand(5,($height-5)),mt_rand(0,360),mt_rand(0,360),$arccolor);

    }

    // 绘制一百个点

    for($i=0;$i<100;$i++){

      $pixelcolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),rand(200,255));

      imagesetpixel($img,mt_rand(1,($width-1)),mt_rand(1,($height-1)),$pixelcolor);

    }

    // 绘制五条线段

    for($i=0;$i<5;$i++){

      $linecolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),rand(200,255));

      imageline($img,mt_rand(1,($width-1)),mt_rand(1,($height-1)),mt_rand(1,($width-1)),mt_rand(1,($height-1)),$linecolor);

    }

    // 设置边框颜色

    $bdcolor=imagecolorallocate($img,mt_rand(150,200),mt_rand(150,200),rand(150,200));

    // 绘制一个矩形无填充边框

    imagerectangle($img,0,0,($width-1),($height-1),$bdcolor);

    // 设置验证码字符串

    $str=&#39;&#39;;

    for($i=1;$i<=$n;$i++){

      $str.=substr(str_shuffle($code),0,1);

    }

    $_SESSION[&#39;a&#39;]=$str;

    //

    for($i=0;$i<$n;$i++){

      $textcolor=imagecolorallocate($img,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));

      imagettftext($img,1/($n+1)*$width,mt_rand(-20,20),((1-$n/(5+$n))*$width/($n-1)+$i*1/($n+1)*$width),1/2*($height+3/5*$height),$textcolor,&#39;1.ttf&#39;,substr($str,$i,1));

    }

    // 打印图像

    imagepng($img);

    // 释放资源

    imagedestroy($img);

    return $str;

  }

  //缩略图类

  /*

  *$source需要缩略的图片

  */

  static public function thumbnail($source,$deletesource=false,$width=180){

    $info=getimagesize($source);

    //getimagesize方法获得图像的详细信息

    $createFun=str_replace(&#39;/&#39;,&#39;createfrom&#39;,$info[&#39;mime&#39;]);

    //将getimagesize中的[&#39;mime&#39;]中的/替换,变为imagecreatefromjpeg方法

    $src=$createFun($source);

    //创建图像

    $dst_w=$width;

    //缩略图的宽

    $dst_h=$width/$info[0]*$info[1];

    //计算缩略图的高

    $dst=imagecreatetruecolor($dst_w,$dst_h);

    //新建一个真彩色图像

    imagecopyresampled($dst,$src,0,0,0,0,$dst_w,$dst_h,$info[&#39;0&#39;],$info[&#39;1&#39;]);

    //重采样拷贝部分图像并调整大小

    $saveFun=str_replace(&#39;/&#39;,&#39;&#39;,$info[&#39;mime&#39;]);

    //设置保存函数

    $ext=strrchr($source,&#39;.&#39;);

    //strrchr查找指定字符在字符串中的最后一次出现,返回包括其自身在内的剩余的字符串

    $thumbnailName=str_replace($ext,&#39;&#39;,$source).&#39;_thumbnail&#39;.$ext;

    //设置保存路径

    if(!$deletesource){

      $saveFun($dst,$thumbnailName);

      //保存图像

    }else{

      $saveFun($dst,$thumbnailName);

      unlink($source);

      //删除原图

    }

    imagedestroy($src);

    //销毁资源

    imagedestroy($dst);

    //销毁资源

    return $thumbnailName;

  

  }

  //水印图类

  /*

  *$srcing水印图

  *$dsting原图

  */

  static public function watermark($dstimg,$srcimg){

    $dstinfo=getimagesize($dstimg);

    //getimagesize方法获取该图片的详细信息(该方法返回的是一个详细的数组)

    $srcinfo=getimagesize($srcimg);

    $createdst=str_replace(&#39;/&#39;,&#39;createfrom&#39;,$dstinfo[&#39;mime&#39;]);

    //将getimagesize方法返回的数组中的mime值中的/替换,结果为imagecreatefromjpeg

    $createsrc=str_replace(&#39;/&#39;,&#39;createfrom&#39;,$srcinfo[&#39;mime&#39;]);

    $dst=$createdst($dstimg);

    //替换后为imagecreatefromjpeg函数,创建一个图像

    $dst_w=imagesx($dst);

    //获取大图的宽

    $dst_h=imagesy($dst);

    //获取大图的高

    $src=$createsrc($srcimg);

    //替换后为imagecreatefromjpeg函数,创建一个图像

    $src_w=imagesx($src);

    //获取水印图的宽

    $src_h=imagesy($src);

    //获取水印图的高

    $watermaker=imagecopy($dst,$src,($dst_w-$src_w),($dst_h-$src_h),0,0,$src_w,$src_h);

    //将水印图复制在大图上

    $saveFun=str_replace(&#39;/&#39;,&#39;&#39;,$dstinfo[&#39;mime&#39;]);

    //将getimagesize返回数组中的[&#39;mime&#39;]中的斜杠替换为空,替换后的值为imagejpeg,即为保存函数

    $ext=strrchr($dstimg,&#39;.&#39;);

    //strrchr查找指定字符在字符串中的最后一次出现,返回包括其自身在内的剩余的字符串

    $watermaker=str_replace($ext,&#39;&#39;,$dstimg).&#39;_water&#39;.time().$ext;

    //保存名

    $saveFun($dst,$watermaker);

    //保存图片,第一个参数为要保存的图片,第二个参数为保存路径或保存名

    imagedestroy($dst);

    //销毁资源

    imagedestroy($src);

    //销毁资源

    return $watermaker;

  

  }

  

}

?>

登录后复制

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。

相关推荐:

php使用ffmpeg实现向视频中添加文字字幕的方法

PHP简单实现防止SQL注入的方法

php 数组随机取值的方法及简单实例

以上是php生成验证码,缩略图及水印图的类实例详解的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板