Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

.NET 一维、二维码生成DEMO

$
0
0

条码技术越来越流行,已经不再局限于物流、超市等专业行业了,很多网站都已经加上了二维码,作为代码民工们,怎么能不懂得用这门技术呢。

 

在网上找了一些资料,一维码生成的源码相对较多,也可用,二维码的也不少,但我发现找来找去都是同一个DEMO,而且跑不动,晕死,后来找到了QrCodeNet的源码才搞掂。

 

关键代码如下:

一维码生成(调用BarcodeLib):

        //生成一维码图片
        private byte[] GetBarcode(int height, int width, BarcodeLib.TYPE type,
                                           string code, out System.Drawing.Image image)
        {
            image = null;
            BarcodeLib.Barcode b = new BarcodeLib.Barcode();
            b.BackColor = System.Drawing.Color.White;
            b.ForeColor = System.Drawing.Color.Black;
            b.IncludeLabel = true;
            b.Alignment = BarcodeLib.AlignmentPositions.CENTER;
            b.LabelPosition = BarcodeLib.LabelPositions.BOTTOMCENTER;
            b.ImageFormat = System.Drawing.Imaging.ImageFormat.Jpeg;
            System.Drawing.Font font = new System.Drawing.Font("verdana", 10f);
            b.LabelFont = font;

            b.Height = height;
            b.Width = width;

            try
            {
                image = b.Encode(type, code);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                image = null;
            }
            //SaveImage(image, Guid.NewGuid().ToString("N") + ".png");
            byte[] buffer = b.GetImageData(BarcodeLib.SaveTypes.GIF);
            return buffer;
        }

        //调用
        private void BuildBarcode()
        {
            string number = string.IsNullOrEmpty(textBox1.Text.Trim()) ? "Avx-(13614)-vR" : textBox1.Text.Trim();
            BarcodeLib.TYPE codeType = comboBox1.SelectedIndex == -1 ? BarcodeLib.TYPE.CODE128 : (BarcodeLib.TYPE)Enum.Parse(typeof(BarcodeLib.TYPE), comboBox1.Text);
            System.Drawing.Image image;
            int width = 250, height = 100;
            byte[] buffer = GetBarcode(height, width,
                codeType, number, out image);

            pictureBox1.Image = image;
            if (image != null)
                pictureBox1.SizeMode = image.Height > pictureBox1.Height ? PictureBoxSizeMode.Zoom : PictureBoxSizeMode.Normal;
        }    

 


二维码生成类(调用QrCodeNet):

    /// <summary>
    /// Class containing the description of the QR code and wrapping encoding and rendering.
    /// </summary>
    internal class CodeDescriptor
    {
        public ErrorCorrectionLevel Ecl;
        public string Content;
        public QuietZoneModules QuietZones;
        public int ModuleSize;
        public BitMatrix Matrix;
        public string ContentType;

        /// <summary>
        /// Parse QueryString that define the QR code properties
        /// </summary>
        /// <param name="request">HttpRequest containing HTTP GET data</param>
        /// <returns>A QR code descriptor object</returns>
        public static CodeDescriptor Init(ErrorCorrectionLevel level, string content, QuietZoneModules qzModules, int moduleSize)
        {
            var cp = new CodeDescriptor();

            //// Error correction level
            cp.Ecl = level;
            //// Code content to encode
            cp.Content = content;
            //// Size of the quiet zone
            cp.QuietZones = qzModules;
            //// Module size
            cp.ModuleSize = moduleSize;
            return cp;
        }

        /// <summary>
        /// Encode the content with desired parameters and save the generated Matrix
        /// </summary>
        /// <returns>True if the encoding succeeded, false if the content is empty or too large to fit in a QR code</returns>
        public bool TryEncode()
        {
            var encoder = new QrEncoder(Ecl);
            QrCode qr;
            if (!encoder.TryEncode(Content, out qr))
                return false;

            Matrix = qr.Matrix;
            return true;
        }

        /// <summary>
        /// Render the Matrix as a PNG image
        /// </summary>
        /// <param name="ms">MemoryStream to store the image bytes into</param>
        internal void Render(MemoryStream ms)
        {
            var render = new GraphicsRenderer(new FixedModuleSize(ModuleSize, QuietZones));
            render.WriteToStream(Matrix, System.Drawing.Imaging.ImageFormat.Png, ms);
            ContentType = "image/png";
        }
    }


二维码生成调用:

            string content = string.IsNullOrEmpty(textBox1.Text.Trim()) ? "http://www.nnbh.cn" : textBox1.Text.Trim();

            var codeParams = CodeDescriptor.Init(ErrorCorrectionLevel.H, content, QuietZoneModules.Two, 5);

            codeParams.TryEncode();

            // Render the QR code as an image
            using (var ms = new MemoryStream())
            {
                codeParams.Render(ms);

                Image image = Image.FromStream(ms);
                pictureBox1.Image = image;
                if (image != null)
                    pictureBox1.SizeMode = image.Height > pictureBox1.Height ? PictureBoxSizeMode.Zoom : PictureBoxSizeMode.Normal;
            }


 

DEMO已经上传,有兴趣的可以下载看一下。

DEMO开发环境:VS2012

下载地址:一维、二维码生成DEMO

 

 

 

 

 

作者:ranbolwb 发表于2013-4-11 16:38:33 原文链接
阅读:53 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>