c#二维码生成和解码

mac2024-03-20  34

文件下载链接

引用包

此方法的解码缺点:只能解此方法生成的二维码

一、生成 : 一般处理程序

public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.AddHeader("Access-Control-Allow-Origin", "*"); context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); context.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type"); ///内容 string Content = context.Request["Content"]; //网址图片Url string ImageUrl = context.Request["Image"]; //本地图片路径 string LocalImage = context.Request["LocalImage"]; //网址图片的处理方法 Bitmap BitmapImage = null; if (ImageUrl != "" && LocalImage == "") { BitmapImage = CreateQRCodeWithLogo(Content, ImageUrl, true); } else { BitmapImage = CreateQRCodeWithLogo(Content, LocalImage, false); } ///Bitmap转换成流 using (MemoryStream memoryStream = new MemoryStream()) { BitmapImage.Save(memoryStream,ImageFormat.Png); byte[] ImageInfo = new byte[memoryStream.Length]; //流从0开始 memoryStream.Position = 0; memoryStream.Read(ImageInfo,0, int.Parse(memoryStream.Length.ToString())); //转换成64编码 string strbaser64 = Convert.ToBase64String(ImageInfo); strbaser64 = "data:image/png;base64," + strbaser64.ToString(); context.Response.Write(strbaser64); } } /// <summary> /// 生成二维码 /// </summary> /// <param name="Content"></param> /// <returns></returns> public Bitmap CreateQRCode(string Content) { try { ///生成二维码的对象 QRCodeEncoder qRCode = new QRCodeEncoder(); //二维码的类型 qRCode.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; //二维码的尺寸 qRCode.QRCodeScale = 5; //二维码的版本 qRCode.QRCodeVersion = 7; //二维码容错程度 qRCode.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; //字体与背景颜色 qRCode.QRCodeBackgroundColor = Color.White;//背景颜色 qRCode.QRCodeForegroundColor = Color.Black;//字体颜色 //UTF-8编码类型 //生成二维码 Bitmap qrcode = qRCode.Encode(Content, Encoding.UTF8); return qrcode; } catch (Exception) { return null; } } /// <summary> /// 生成带Logo的二维码 /// </summary> /// <param name="Conent"></param> /// <returns></returns> public Bitmap CreateQRCodeWithLogo(string Content, string LogoRoute,bool IsLocal) { //生成二维码 Bitmap QRCode = CreateQRCode(Content); ///Logo对象 Bitmap LogoBitmap = null; //判断Logo是否是本地资源 if (IsLocal) { LogoBitmap = HttpGet(LogoRoute);//获取网址Logo资源 } else { LogoBitmap = new Bitmap(LogoRoute);//获取本地Logo资源 } //合成图片 ImageUtility image = new ImageUtility(); Bitmap finaImage = image.MergeQrImg(QRCode,LogoBitmap); return finaImage; } /// <summary> /// 请求获取图片的流,然后转换成Bitmap /// </summary> /// <param name="ImageRoute"></param> /// <returns></returns> public Bitmap HttpGet(string ImageRoute) { HttpWebRequest httpWeb = WebRequest.Create(ImageRoute) as HttpWebRequest; httpWeb.Method = "Get"; HttpWebResponse webResponse = httpWeb.GetResponse() as HttpWebResponse; using (Stream stream = webResponse.GetResponseStream()) { Image Image = Image.FromStream(stream); Bitmap bitmap = new Bitmap(Image); return bitmap; } }

二、运行效果

返回的是:Base64码

三、解码 : 一般处理程序

public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.AddHeader("Access-Control-Allow-Origin", "*"); context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); context.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type"); string ImageUrl = context.Request["ImageUrl"]; string localImageUrl = context.Request["localImageUrl"]; if (ImageUrl != "" && localImageUrl == "") { string Content = IsLocalGetQRCode(ImageUrl, true); context.Response.Write(Content); } else { string Content = IsLocalGetQRCode(localImageUrl,false); context.Response.Write(Content); } } /// <summary> /// 二维码解码 /// </summary> /// <param name="QRCodeImageUrl"></param> /// <returns></returns> public string GetQRCode(Bitmap QRCodeImageUrl) { string Cotent = ""; try { //解码对象 QRCodeDecoder qRCode = new QRCodeDecoder(); //开始解码 Cotent = qRCode.decode(new QRCodeBitmapImage(QRCodeImageUrl)); return Cotent; } catch (SystemException) { return "此二维码不在本解码服务之内, 请用其他的解码工具"; } } /// <summary> /// 判断是否本地图片 /// </summary> /// <param name="ImageUrl"></param> /// <param name="IsLocal"></param> /// <returns></returns> public string IsLocalGetQRCode(string ImageUrl, bool IsLocal) { Bitmap Imagebitmap = null; if (IsLocal) { Imagebitmap = HttpGet(ImageUrl); } else { Imagebitmap = new Bitmap(ImageUrl); } return GetQRCode(Imagebitmap); } /// <summary> /// 假如网络上面的图片,就使用请求图片然后返回流 /// </summary> /// <param name="ImageUrl"></param> /// <returns></returns> public Bitmap HttpGet(string ImageUrl) { HttpWebRequest httpWeb = WebRequest.Create(ImageUrl) as HttpWebRequest; httpWeb.Method = "Get"; HttpWebResponse webResponse = httpWeb.GetResponse() as HttpWebResponse; Stream Imagestream = webResponse.GetResponseStream(); Bitmap Imagebitmap = new Bitmap(Bitmap.FromStream(Imagestream)); return Imagebitmap; }

四、效果

最新回复(0)