Net Zxing 源码地址 http://zxingnet.codeplex.com/
github 地址 https://github.com/zxing/zxing
新建一个Winform 项目,引用zxing.dll就可了,下图是生成的二维码
//生成中间带二维码的图片 private void btnImageCode_Click(object sender, EventArgs e) { lblShow.Text = ""; try { //构造二维码写码器 MultiFormatWriter mutiWriter = new MultiFormatWriter(); Hashtable hint = new Hashtable(); hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8"); hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); //生成二维码 ByteMatrix bm = mutiWriter.encode(txtContent.Text, BarcodeFormat.QR_CODE, 300, 300, hint); Bitmap img = bm.ToBitmap(); //要插入到二维码中的图片 Image middlImg = picLittle.Image; //获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸) Size realSize = mutiWriter.GetEncodeSize(txtContent.Text, BarcodeFormat.QR_CODE, 300, 300); //计算插入图片的大小和位置 int middleImgW = Math.Min((int)(realSize.Width / 3.5), middlImg.Width); int middleImgH = Math.Min((int)(realSize.Height / 3.5), middlImg.Height); int middleImgL = (img.Width - middleImgW) / 2; int middleImgT = (img.Height - middleImgH) / 2; //将img转换成bmp格式,否则后面无法创建 Graphics对象 Bitmap bmpimg = new Bitmap(img.Width, img.Height, PixelFormat.Format32bppArgb); using (Graphics g = Graphics.FromImage(bmpimg)) { g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.SmoothingMode = SmoothingMode.HighQuality; g.CompositingQuality = CompositingQuality.HighQuality; g.DrawImage(img, 0, 0); } //在二维码中插入图片 Graphics MyGraphic = Graphics.FromImage(bmpimg); //白底 MyGraphic.FillRectangle(Brushes.White, middleImgL, middleImgT, middleImgW, middleImgH); MyGraphic.DrawImage(middlImg, middleImgL, middleImgT, middleImgW, middleImgH); picCode.Image = bmpimg; //自动保存图片到当前目录 string filename = Environment.CurrentDirectory + "\\QR" + DateTime.Now.Ticks.ToString() + ".jpg"; bmpimg.Save(filename, ImageFormat.Jpeg); lblShow.Text = "图片已保存到:" + filename; } catch (Exception ee) { MessageBox.Show(ee.Message); } }
生成条形码、二维码和图片解码代码
//生成条形码 private void btnBarCode_Click(object sender, EventArgs e) { lblShow.Text = ""; Regex rg = new Regex("^[0-9]{13}$"); if (!rg.IsMatch(txtContent.Text.Trim())) { MessageBox.Show("本例子采用EAN_13编码,需要输入13位数字"); return; } try { MultiFormatWriter mutiWriter = new MultiFormatWriter(); ByteMatrix bm = mutiWriter.encode(txtContent.Text, BarcodeFormat.EAN_13, 363, 150); Bitmap img= bm.ToBitmap(); picCode.Image = img; //自动保存图片到当前目录 string filename = Environment.CurrentDirectory + "\\EAN_13" + DateTime.Now.Ticks.ToString() + ".jpg"; img.Save(filename, ImageFormat.Jpeg); lblShow.Text = "图片已保存到:" + filename; } catch (Exception ex) { MessageBox.Show(ex.Message); } } //生成二维码 private void btnDimensionCode_Click(object sender, EventArgs e) { lblShow.Text = ""; try { //构造二维码写码器 MultiFormatWriter mutiWriter = new MultiFormatWriter(); ByteMatrix bm = mutiWriter.encode(txtContent.Text, BarcodeFormat.QR_CODE, 300, 300); Bitmap img = bm.ToBitmap(); picCode.Image = img; //自动保存图片到当前目录 string filename = Environment.CurrentDirectory + "\\QR" + DateTime.Now.Ticks.ToString() + ".jpg"; img.Save(filename, ImageFormat.Jpeg); lblShow.Text = "图片已保存到:" + filename; } catch (Exception ex) { MessageBox.Show(ex.Message); } } //打开二维码图片路径 string opFilePath = string.Empty; //插入二维码中的小图片 private void picLittle_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "图片文件|*.bmp;*.jpg;*.png;*.ico"; if (ofd.ShowDialog() == DialogResult.OK) { opFilePath = ofd.FileName; picLittle.Image = Image.FromFile(opFilePath); } } //生成中间带二维码的图片 private void btnImageCode_Click(object sender, EventArgs e) { lblShow.Text = ""; try { //构造二维码写码器 MultiFormatWriter mutiWriter = new MultiFormatWriter(); Hashtable hint = new Hashtable(); hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8"); hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); //生成二维码 ByteMatrix bm = mutiWriter.encode(txtContent.Text, BarcodeFormat.QR_CODE, 300, 300, hint); Bitmap img = bm.ToBitmap(); //要插入到二维码中的图片 Image middlImg = picLittle.Image; //获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸) Size realSize = mutiWriter.GetEncodeSize(txtContent.Text, BarcodeFormat.QR_CODE, 300, 300); //计算插入图片的大小和位置 int middleImgW = Math.Min((int)(realSize.Width / 3.5), middlImg.Width); int middleImgH = Math.Min((int)(realSize.Height / 3.5), middlImg.Height); int middleImgL = (img.Width - middleImgW) / 2; int middleImgT = (img.Height - middleImgH) / 2; //将img转换成bmp格式,否则后面无法创建 Graphics对象 Bitmap bmpimg = new Bitmap(img.Width, img.Height, PixelFormat.Format32bppArgb); using (Graphics g = Graphics.FromImage(bmpimg)) { g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.SmoothingMode = SmoothingMode.HighQuality; g.CompositingQuality = CompositingQuality.HighQuality; g.DrawImage(img, 0, 0); } //在二维码中插入图片 Graphics MyGraphic = Graphics.FromImage(bmpimg); //白底 MyGraphic.FillRectangle(Brushes.White, middleImgL, middleImgT, middleImgW, middleImgH); MyGraphic.DrawImage(middlImg, middleImgL, middleImgT, middleImgW, middleImgH); picCode.Image = bmpimg; //自动保存图片到当前目录 string filename = Environment.CurrentDirectory + "\\QR" + DateTime.Now.Ticks.ToString() + ".jpg"; bmpimg.Save(filename, ImageFormat.Jpeg); lblShow.Text = "图片已保存到:" + filename; } catch (Exception ee) { MessageBox.Show(ee.Message); } } private void btnSelect_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "图片文件|*.bmp;*.jpg;*.png;*.ico"; if (ofd.ShowDialog() == DialogResult.OK) { opFilePath = ofd.FileName; picDeCode.ImageLocation = opFilePath; } } //图片解码 private void btnDecode_Click(object sender, EventArgs e) { MultiFormatReader multiReader = new MultiFormatReader(); Bitmap img = (Bitmap)Bitmap.FromFile(opFilePath); if (img == null) return; LuminanceSource ls = new RGBLuminanceSource(img, img.Width, img.Height); BinaryBitmap bb = new BinaryBitmap(new HybridBinarizer(ls)); //注意 必须是Utf-8编码 Hashtable hints = new Hashtable(); hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8"); Result r = multiReader.decode(bb, hints); txtDeCodeMsg.Text = r.Text; lblShow.Text = "解码成功!"; }
生成二维码还有ThoughtWorks.QRCode.dll
public void MarkQrCode(string str) { //初始化二维码生成工具 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; qrCodeEncoder.QRCodeVersion = 0; //版本 qrCodeEncoder.QRCodeScale = 4; //大小 //将字符串生成二维码图片 Bitmap image = qrCodeEncoder.Encode(str, Encoding.Default); //保存为PNG到内存流 MemoryStream ms = new MemoryStream(); image.Save(ms, ImageFormat.Png); //输出二维码图片 Response.BinaryWrite(ms.GetBuffer()); Response.End(); }