zoukankan      html  css  js  c++  java
  • 使用 QRCoder 实现生成二维码

    1. Nuget 安装 QRCoder

    2. 调用 QRCoder 生成二维码的 Bitmap 对象

    		/// <summary>
    		/// 把文字编码成二维码
    		/// </summary>
    		/// <param name="text">需要编码的文字内容</param>
    		/// <param name="version">版本 1 ~ 40</param>
    		/// <param name="pixel">像素点大小</param>
    		/// <param name="iconsize">图标尺寸</param>
    		/// <param name="iconboder">图标边框厚度</param>
    		/// <param name="whiteEdge">二维码白边</param>
    		/// <returns></returns>
    		public static Bitmap Encode(string text, int version, int pixel, int iconsize, int iconboder, bool whiteEdge)
    		{
    			QRCoder.QRCodeGenerator qrCodeGenerator = new QRCoder.QRCodeGenerator();
    
    			QRCoder.QRCode code = new QRCoder.QRCode(qrCodeGenerator.CreateQrCode(
    				text,
    				QRCoder.QRCodeGenerator.ECCLevel.M,
    				true,
    				true,
    				QRCoder.QRCodeGenerator.EciMode.Utf8,
    				version));
    
    			Bitmap icon = new Bitmap(iconsize, iconsize, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
    			Bitmap bmp = code.GetGraphic(pixel, Color.Black, Color.White, icon, iconsize, iconboder, whiteEdge);
    
    			return bmp;
    		}
    

    3. 生成二维码并绑定到 Image(WPF)控件中

    <Window x:Class="NT.TestQRCode.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:NT.TestQRCode"
            mc:Ignorable="d"
            Title="二维码编码测试" Height="600" Width="1000" ResizeMode="NoResize">
    	<Grid>
    		<Grid.ColumnDefinitions>
    			<ColumnDefinition Width="1*"/>
    			<ColumnDefinition Width="1*"/>
    		</Grid.ColumnDefinitions>
    		<Grid Grid.Row="0" Grid.Column="0">
    			<Border Grid.Row="0" Grid.Column="0" Width="400" Height="400" Margin="10" BorderThickness="1" BorderBrush="Gray">
    				<Image x:Name="imgQRCode" VerticalAlignment="Center" HorizontalAlignment="Center"/>
    			</Border>
    		</Grid>
    		<Grid Grid.Row="0" Grid.Column="1" Margin="10" Width="400" Height="400">
    			<Grid.RowDefinitions>
    				<RowDefinition Height="40"/>
    				<RowDefinition Height="40"/>
    				<RowDefinition Height="40"/>
    				<RowDefinition Height="40"/>
    				<RowDefinition Height="40"/>
    				<RowDefinition Height="40"/>
    			</Grid.RowDefinitions>
    			
    			<TextBlock Text="请输入需要编码的文字:" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center"/>
    			
    			<TextBox x:Name="tbxText" Grid.Row="1" Grid.Column="0" VerticalContentAlignment="Center">
    				<TextBox.Resources>
    					<VisualBrush x:Key="HintText" TileMode="None" Opacity="0.5" Stretch="None" AlignmentX="Left">
    						<VisualBrush.Visual>
    							<TextBlock FontStyle="Italic" Text="请输入需要编码的文字"/>
    						</VisualBrush.Visual>
    					</VisualBrush>
    				</TextBox.Resources>
    				<TextBox.Style>
    					<Style TargetType="TextBox">
    						<Style.Triggers>
    							<Trigger Property="Text" Value="{x:Null}">
    								<Setter Property="Background" Value="{StaticResource HintText}"/>
    							</Trigger>
    							<Trigger Property="Text" Value="">
    								<Setter Property="Background" Value="{StaticResource HintText}"/>
    							</Trigger>
    						</Style.Triggers>
    					</Style>
    				</TextBox.Style>
    			</TextBox>
    
    			<Button x:Name="btnRefresh"
    					Grid.Row="3"
    					Grid.Column="0"
    					Width="150"
    					Content="刷新二维码"
    					HorizontalAlignment="Left"
    					Click="btnRefresh_Click" />
    		</Grid>
    	</Grid>
    </Window>
    
    private void btnRefresh_Click(object sender, RoutedEventArgs e)
    		{
    			this.imgQRCode.Source = null;
    
    			if(string.IsNullOrWhiteSpace(this.tbxText.Text))
    			{
    				this.tbxText.Focus();
    				return;
    			}
    
    			string text = this.tbxText.Text.Trim();
    			int version = 5;
    			int pixel = 7;
    			int iconsize = 15;
    			int iconboder = 5;
    			bool whiteEdge = true;
    			Bitmap bitmap = QREncoder.QREncoder.Encode(text, version, pixel, iconsize, iconboder, whiteEdge);
    
    			MemoryStream ms = new MemoryStream();
    			bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
    			ms.Position = 0;
    			BitmapImage bi = new BitmapImage();
    			bi.BeginInit();
    			bi.StreamSource = ms;
    			bi.EndInit();
    
    			this.imgQRCode.Source = bi;
    		}
    

      

  • 相关阅读:
    linux下FFmpeg编译生成ffplay
    linux下ffmpeg安装
    linux之x86裁剪移植---字符界面sdl开发入门
    Linux忘记开机密码怎么办?
    linux命令--ldconfig和ldd用法
    linux命令之 ifconfig
    Linuxshell脚本之if条件判断
    redis之django-redis
    深刻理解Python中的元类(metaclass)
    【Django错误】OSError: raw write() returned invalid length 14 (should have been between 0 and 7)
  • 原文地址:https://www.cnblogs.com/462079558/p/14463468.html
Copyright © 2011-2022 走看看