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

动漫人物做羞羞事的网站/上海网络推广优化公司

动漫人物做羞羞事的网站,上海网络推广优化公司,常德网站建设的策划方案,类似商城网站开发策划书在前端开发的时候,常用的一个需求就是图形验证码,那么如果后端使用Delphi开发,随机生成一个验证码图片,是如何实现呢? 其实如果是VCL,就是调用TBitMap对象来实现,TBitMap有详细的Canvas操作函数…

 在前端开发的时候,常用的一个需求就是图形验证码,那么如果后端使用Delphi开发,随机生成一个验证码图片,是如何实现呢?

其实如果是VCL,就是调用TBitMap对象来实现,TBitMap有详细的Canvas操作函数,具体的操作参见Delphi的帮助文档。

直接上源代码如下:

{*******************************************************
生成验证码图片: 2023-04-07
作者:sensor(老吴)QQ:910731685
将生成的图片转换成png格式,减少传输数据量。
如果是BMP图片,样本:19KB,转换成png后大小为:3KB
*******************************************************}
unit uSZHN_VerifyCode;interface
usesSystem.Classes,System.SysUtils,VCL.Graphics,System.UIConsts,System.UITypes,Vcl.ExtCtrls,
//  Vcl.Imaging.jpeg,Vcl.Imaging.pngimage,System.Types;type// 生成验证码组件TSZHN_GenerateVerifyCode = classprivate const// 定义字典表,不要零(0),因为零和字母O样子太接近arrStr: array [0 .. 42] of char = ('1','2','3','4','5','6','7','8','9','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','我','爱','中','国','科','技','畅','想');privateFBitmapWidth:   integer;      // 图片宽度FBitmapHeight:  integer;      // 图片高度FCodeCount:     integer;      // 取验证码字符的个数,默认是4个字符FFontName:      string;       // 字体名称FMinFontSize:   integer;      // 最小字体大小FRandomLineCount: integer;    // 背景随机线条数FXRandomLen:    integer;      // X的随机值长度FYRandomLen:    integer;      // Y的随机值长度// 画出验证码函数function VerifyCodeDrawImg(BMP : TBitmap): string;publicconstructor Create;procedure GetVerifyCodeAndImage(ImageStream: TStream; var VerifyCode: string);publishedproperty Width: integer           read FBitmapWidth     write FBitmapWidth;property Height: integer          read FBitmapHeight    write FBitmapHeight;property CodeCount: integer       read FCodeCount       write FCodeCount;property MinFontSize: integer     read FMinFontSize     write FMinFontSize;property RandomLineCount: integer read FRandomLineCount write FRandomLineCount;property XRandomLen: integer      read FXRandomLen      write FXRandomLen;property YRandomLen: integer      read FYRandomLen      write FYRandomLen;end;//外部调用函数,  ImageStream 参数返回的是生成的验证码图片数据流,结果为验证码字符串
function Create_VerifyCode(ImageStream: TStream): string;implementation//外部调用函数,  ImageStream 参数返回的是生成的验证码图片数据流,结果为验证码字符串
function Create_VerifyCode(ImageStream: TStream): string;
varSZHN_GenerateVerifyCode : TSZHN_GenerateVerifyCode;
beginSZHN_GenerateVerifyCode := TSZHN_GenerateVerifyCode.Create;trySZHN_GenerateVerifyCode.GetVerifyCodeAndImage(ImageStream, Result);finallySZHN_GenerateVerifyCode.Free;end;end;constructor TSZHN_GenerateVerifyCode.Create();
begininherited;FBitmapWidth      := 120;FBitmapHeight     := 40;FCodeCount        := 4;FMinFontSize      := 4;FRandomLineCount  := 10;FXRandomLen       := 5;FYRandomLen       := 4;
end;// 获取验证码和图片的流数据
procedure TSZHN_GenerateVerifyCode.GetVerifyCodeAndImage(ImageStream: TStream;var VerifyCode: string);
varBMP : TBitmap;PNG : TPNGImage;
beginBMP := TBitmap.Create;PNG := TPNGImage.Create;try// 默认 宽120,高40BMP.Width := FBitmapWidth;BMP.Height:= FBitmapHeight;//画验证码图,返回的是图形字符串VerifyCode := VerifyCodeDrawImg(BMP);//转换成png格式PNG.Assign(BMP);PNG.CompressionLevel := 9;          //最高压缩率  0..9PNG.SaveToStream(ImageStream);      //保存成 Stream ,以便可以传递给前端(Base64)finallyFreeAndNil(BMP);FreeAndNil(PNG);end;end;// 画出验证码函数
function TSZHN_GenerateVerifyCode.VerifyCodeDrawImg(BMP : TBitmap): string;
varI, j, k: integer;X, Y, W, H: integer;vLeft: integer;strResult: string;//随机颜色函数function RandomColor : TColor;beginResult := Random($FF) shl 16 + Random($FF) shl 8 + Random($FF);end;//随机生成字体名字,内置6种字体随机切换function Random_FontName: string;varFontNames : Tarray<string>;beginSetLength(FontNames,6);FontNames[0] := 'Microsoft JhengHei UI';FontNames[1] := '宋体';FontNames[2] := 'Microsoft YaHei UI';FontNames[3] := 'Ink Free';FontNames[4] := 'Malgun Gothic';FontNames[5] := 'Cascadia Code';Randomize;Result := FontNames[Random(1000000) mod 6];end;begin// 随机获取字符,默认4个字符For j := 1 to FCodeCount dobeginRandomize;k := Random(1000000) mod 43;strResult := strResult + trim(arrStr[k]);end;vLeft := 5;//设置背景颜色BMP.Canvas.Brush.Style := bsSolid;BMP.Canvas.Brush.Color := RandomColor;BMP.Canvas.FillRect(TRect.Create(0, 0, FBitmapWidth, FBitmapHeight));// 随机画10条线for j := 1 to FRandomLineCount dobeginRandomize;BMP.Canvas.Brush.Style := bsCross;BMP.Canvas.Pen.Color := RandomColor;BMP.Canvas.Pen.Width := 1;BMP.Canvas.Pen.Mode  := pmXor;BMP.Canvas.MoveTo(Random(FBitmapWidth), Random(FBitmapHeight));BMP.Canvas.LineTo(Random(FBitmapWidth), Random(FBitmapHeight));end;for I := 1 to length(strResult) dobeginRandomize;// 随机字体颜色,这里暂时不用每个字符一个随机颜色BMP.Canvas.Font.Color := RandomColor;//设置字体名字BMP.Canvas.Font.Name := Random_FontName;// 字体大小BMP.Canvas.Font.Size := Random(8) + FMinFontSize;if BMP.Canvas.Font.Size < (FMinFontSize + 5) thenBMP.Canvas.Font.Size := BMP.Canvas.Font.Size + 5;if Random(2) = 1 thenBMP.Canvas.Font.Style := [TFontStyle.fsBold]elseBMP.Canvas.Font.Style := [TFontStyle.fsItalic];beginX := Random(FXRandomLen) + vLeft;Y := Random(FYRandomLen);W := BMP.Canvas.TextWidth(strResult[I]);H := BMP.Canvas.TextHeight(strResult[I]);BMP.Canvas.TextOut(X,Y,strResult[I]);vLeft := X + W + 1;end;end;Result := strResult; // 返回值 ,验证码字符串
end;end.

具体使用代码:

usesuSZHN_VerifyCode;
varsVerifyCode : string;  //验证码字符串TM : TMemoryStream;    //验证码图片数据流信息
beginTM := TMemoryStream.Create;sVerifyCode := Create_VerifyCode(TM);TM.SaveToFile('C:\Temp\1.png');   //可以保存成文件Image1.Picture.LoadFromFile('C:\Temp\1.png');  //可以直接在Image1中显示出来TM.Free;
end;

http://www.lbrq.cn/news/1059499.html

相关文章:

  • 天津市做网站的公司/预测2025年网络营销的发展
  • 中国国际贸易网官网/前端seo是什么
  • 莱芜做网站优化/百度联盟广告
  • 网站建设需要多少钱知乎/谷歌代运营
  • 可信赖的丹阳网站建设/googleseo服务公司
  • 微网站风格/搜索引擎排名国内
  • 做婚姻网站流程/网络营销推广方案步骤
  • 高大上的企业网站欣赏/媒体宣传推广方案
  • 网站怎么做收费/海外推广营销 平台
  • 用dreamware制作网页/seo引擎优化外包公司
  • 怎么做多语言网站/曼联vs恩波利比分
  • wordpress网站加壳/天猫代运营
  • 企业收录网站/域名是什么意思呢
  • 网站维护及更新方案/百度seo按天计费
  • 河北提供网站建设公司电话/seo的优化技巧和方法
  • 哪些网站可以做图片链接/什么是网络推广
  • 动态网站建设第3章在线测试/长沙有实力的关键词优化价格
  • 周年庆网站要怎么做6/青岛百度竞价
  • 西红门网站建设/网站外包
  • 深圳域名服务器地址/文明seo
  • 成都网站关键词优化/关键字
  • 还有哪些网站可以做H5/信阳网络推广公司
  • 衡阳网站seo/常熟网站建设
  • 网上接单做效果图哪个网站好/网站搭建需要多少钱?
  • 最方便在线网站开发/百中搜优化软件
  • 手机网站推荐一个/网址推荐
  • 宁波网站建设费用/百度关键词排名查询
  • 深圳昨天下午出大事/杭州seo顾问
  • wordpress get_header/什么是seo搜索
  • 无锡网站营销公司/淘宝app官方下载
  • (ZipList入门笔记二)为何ZipList可以实现内存压缩,可以详细介绍一下吗
  • HTML 如何转 Markdown
  • ESP-idf框架下的HTTP服务器\HTML 485温湿度采集并长传
  • Python中的sys.path与PYTHONPATH全解析:模块导入路径的底层机制与最佳实践
  • RAG-Semantic Chunking
  • Celery-分布式任务队列