最近发现很多网站都是使用的彩色二维码,放眼望去,网站档次明显提升
相比传统黑白二维码,彩色二维码总会给人眼前一亮的感觉
(如果你不认为彩色二维码比黑白二维码有趣,也可以不必拘泥于形式)
下面来看下C#.Net中如何生成彩色二维码。
简介:C#.Net使用ZXing帮助类生成彩色二维码,二维码色调、二维码大小根据自己需要可任意调节。
Html页面布局(其实就是一个图片标签用于展示生成的二维码)
<!DOCTYPE html>
<html>
<head runat="server">
<title>C#.Net生成彩色渐变二维码案例</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<img src="/QcHandler.ashx?act=getqc" height="164"
width="164">
</div>
</form>
</body>
</html>
C#后端业务逻辑部分代码展示
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using com.google.zxing.qrcode;
using System.Collections;
using com.google.zxing;
using System.Drawing;
using com.google.zxing.qrcode.decoder;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Text;
using System.IO;
namespace ZXingQcWeb
{
/// <summary>
/// C#.Net生成彩色渐变二维码案例
/// 作者:www.yunjson.com
/// </summary>
public class QcHandler : IHttpHandler
{
delegate void func(HttpContext context);
static Dictionary<string, func> services = new Dictionary<string, func>();
public void ProcessRequest(HttpContext context)
{
string action = context.Request["act"];
HttpContext.Current.Response.ContentType = "image/png";
if (!string.IsNullOrEmpty(action) && services.ContainsKey(action))
{
services[action](context);
}
}
static QcHandler()
{
//生成二维码
services.Add("getqc", delegate(HttpContext context)
{
try
{
string httpstr = "http://www.yunjson.com";
QRCodeWriter writer = new QRCodeWriter();
Hashtable hints = new Hashtable();
hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.Add(EncodeHintType.VERSION_START, 5);
Bitmap image = writer.encode(httpstr, BarcodeFormat.QR_CODE, 0x150, 0x150, hints).ToBitmap();//黑白二维码
Bitmap bitmap2 = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppArgb);
Graphics graphics = Graphics.FromImage(bitmap2);
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.DrawImage(image, 0, 0);
image.Dispose();
Bitmap bitmap3 = QrCodeVertical(bitmap2.Width, bitmap2.Height);//彩色渐变二维码
Color color = Color.FromArgb(200, 224, 120, 1);
int num = 96;
try
{
num -= (Encoding.UTF8.GetBytes(httpstr).Length - 20) / 2;
}
catch (Exception)
{
}
int num2 = num;
int num3 = num2;
for (int i = 0; i < bitmap2.Width; i )
{
for (int j = 0; j < bitmap2.Height; j )
{
Color color3;
Color pixel = bitmap2.GetPixel(i, j);
if ((i < num2) && (j < num3))
{
color3 = ((pixel.A == 0xff) && (pixel.B == 0)) ? color : pixel;
}
else
{
color3 = ((pixel.A == 0xff) && (pixel.B == 0)) ? bitmap3.GetPixel(i, j) : pixel;
}
bitmap2.SetPixel(i, j, color3);
}
}
bitmap3.Dispose();
MemoryStream ms = new MemoryStream();
bitmap2.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
ms.Close();
context.Response.BinaryWrite(ms.ToArray());
return;
}
catch { }
});
}
/// <summary>
/// 设置二维码图片颜色
/// </summary>
/// <param name="width"></param>
/// <param name="heigth"></param>
/// <returns></returns>
private static Bitmap QrCodeVertical(int width, int heigth)
{
var image = new Bitmap(width, heigth, PixelFormat.Format32bppArgb);
var rect = new Rectangle(0, 0, width, heigth);
var brush = new LinearGradientBrush(rect, Color.FromArgb(230, 0x23, 0xa9, 160), Color.FromArgb(0xff, 8, 60, 0x63), LinearGradientMode.Vertical);
Graphics graphics = Graphics.FromImage(image);
graphics.FillRectangle(brush, rect);
graphics.Dispose();
return image;
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
生成的彩色二维码效果展示
如果你有兴趣研究的话,可以下载此DEMO源码自行开发改造属于你自己的五彩二维码(注意:项目中已引用zxing.dll)。