微信二维码名片生成示例
二维码的对于现在已经很流行了,主要是因为其大数据量和容错能力。出于爱好,学了下google的zxing对二维码的处理。
首先生成一张二维码的话,只要输入文本就OK了。
下面是加密的代码
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 | protected void btnEncode_Click( object sender, EventArgs e) { try { //要生成二维码的文本。 string content = "我是逆世狂神\r\n我的百度Hi:http://hi.baidu.com/yunanwu\r\n我的微博:http://weibo.com/wuyunnan" ; //二维码图片保存路径 string file = AppDomain.CurrentDomain.BaseDirectory + "test.png" ; //防止中文乱码,如果此处不进行设置,可以修改源文件(zxing库是开源项目) /*源代码中有两处UTF-8的问题,会导致乱码, 其一:com.google.zxing.qrcode.encoder.encoder类中的 internal const System.String DEFAULT_BYTE_MODE_ENCODING = "ISO-8859-1"; 此处,将ISO-8859-1改为UTF-8 其二:com.google.zxing.qrcode.decoder.DecodedBitStreamParser类的成员 private const System.String UTF8 = "UTF8"; 应将UTF8改为UTF-8 */ Hashtable hst = new Hashtable(); hst.Add(EncodeHintType.CHARACTER_SET, "UTF-8" ); //encode为重载方法,如果不设置Hashtable,则可能会导致中文乱码 zxing.ByteMatrix byteMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, 350, 350,hst); //写入到文件 writeToFile(byteMatrix, System.Drawing.Imaging.ImageFormat.Png, file); //添加头像 addImg(file); //显示到前台 img.InnerHtml += "<img width='256px' src='test.png' id='imgTest' />" ; } catch (Exception ex) { Response.Write(ex.Message); } } public void writeToFile(zxing.ByteMatrix matrix, System.Drawing.Imaging.ImageFormat format, string file) { //生成图片 Bitmap bmap = toBitmap(matrix); //保存图片 bmap.Save(file, format); } public Bitmap toBitmap(zxing.ByteMatrix matrix) { //图片宽度和高度 int width = matrix.Width; int height = matrix.Height; //实例化一张图片(最后的参数是指定图片的像素格式) Bitmap bmap = new Bitmap(width, height,System.Drawing.Imaging.PixelFormat.Format32bppArgb); //循环渲染每个像素 for ( int x = 0; x < width; x++) { for ( int y = 0; y < height; y++) { bmap.SetPixel(x, y, matrix.get_Renamed(x, y) != -1 ? ColorTranslator.FromHtml( "0xFF000000" ) : ColorTranslator.FromHtml( "0xFFFFFFFF" )); } } return bmap; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // 添加头像 /*添加头像的方法主要原理也是添加水印的原理*/ public string addImg( string file) { System.Drawing.Image img = System.Drawing.Image.FromFile(file); System.Drawing.Image img2 = System.Drawing.Image.FromFile( AppDomain.CurrentDomain.BaseDirectory + "1.jpg" ); Graphics g = Graphics.FromImage(img); g.DrawImage(img2, 140, 140, 64, 64); string name = Server.MapPath( "\\new\\" + Path.GetFileName(file)); img.Save(name); //保存带头像的二维码图片 g.Dispose(); img.Dispose(); img2.Dispose(); File.Delete(file); //删除旧二维码 return name; //返回新的二维码图片路径 } |
下面是解析的代码:
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 | protected void btnDecode_Click( object sender, EventArgs e) { //保存上传的文件 string name = AppDomain.CurrentDomain.BaseDirectory + "\\upload\\" + FileUpload1.FileName + ".png" ; FileUpload1.SaveAs(name); //读取图片 System.Drawing.Image img = System.Drawing.Image.FromFile(name); Bitmap bmap; try { bmap = new Bitmap(img); } catch (System.IO.IOException ioe) { Response.Write(ioe.ToString()); return ; } if (bmap == null ) { Response.Write( "无法进行解码" ); return ; } //解码二维码 LuminanceSource source = new RGBLuminanceSource(bmap, bmap.Width, bmap.Height); com.google.zxing.BinaryBitmap bitmap = new com.google.zxing.BinaryBitmap( new zxing.HybridBinarizer(source)); Result result; //保存解码结果 try { result = new MultiFormatReader().decode(bitmap); } catch (ReaderException re) { this .txtContext.Text = re.ToString(); return ; } txtContext.Text =result.Text; } |
扫扫我的二维码名片吧:
此处添加头像的代码是直接重画图片,其实也就是添加水印的原理,如果有更好的方法请赐教...
本文从百度空间搬家到博客园。。
邮箱:yunanwu@foxmail.com
微博:@提灯寻影(http://weibo.com/wuyunnan)
技术主页:http://www.cnblogs.com/yuanawu/
可以白手起家不可手无寸铁!我是我命运的主宰者,我是我灵魂的掌舵人!
每一次的选择都将是一个挑战!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· DeepSeek V3 两周使用总结
· 回顾我的软件开发经历(1)
· C#使用yield关键字提升迭代性能与效率
· 低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解
· 4. 使用sql查询excel内容