zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【leetcode】字符串轮转
    【leetcode】URL化
    【leetcode】学生出勤记录 I
    【leetcode】子域名访问计数
    【leetcode】整数的各位积和之差
    【leetcode】另一个树的子树
    【leetcode】查询后的偶数和
    【leetcode】左叶子之和
    【leetcode】从根到叶的二进制数之和
    【leetcode】平方数之和
  • 原文地址:https://www.cnblogs.com/ZJ199012/p/6293271.html
Copyright © 2011-2022 走看看