Google Zxing 生成二维码

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); 
            }
        }
View Code

生成条形码、二维码和图片解码代码

 //生成条形码
        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 = "解码成功!";
        }
View Code

测试例子代码

生成二维码还有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();   
}    
View Code
原文地址:https://www.cnblogs.com/ZJ199012/p/6293271.html