c#裁剪图片后使用zxing生成二维码示例分享

代码如下:

/// <summary>
/// 生成二维码
/// </summary>
/// <param name="fileName">生成二维码路径</param>
/// <param name="url">生成的内容</param>
/// <param name="width">二维码宽</param>
/// <param name="height">二维码高</param>
/// <param name="userFace">需生成的Logo图片</param>
/// <returns></returns>
private Bitmap GetCodeImgUrl(string fileName, string url, int width, int height, string userFace)
{

BarcodeWriter writer = new BarcodeWriter
    {
        Format = BarcodeFormat.QR_CODE,
        Renderer = new BitmapRenderer
        {
            Foreground = Color.Black
        },
        Options = new ZXing.QrCode.QrCodeEncodingOptions
        {
            DisableECI = true,
            Height = height,
            Width = width,
            Margin = 0,
            CharacterSet = "UTF-8",
            ErrorCorrection = ErrorCorrectionLevel.M
        }
    };

Bitmap bitmap = writer.Write(url);
    if (!string.IsNullOrEmpty(userFace))
    {
        Bitmap bits = (System.Drawing.Bitmap)System.Drawing.Image.FromFile(userFace);
        if (bits != null)
        {                   
            //剪裁一个80*80的Logo图片
            ImageCut img = new ImageCut(0, 0, 80, 80);
            System.Drawing.Bitmap icon = img.KiCut(bits);
            //userFace_b.jpg是一个边框的图片
            Bitmap bits2 = new System.Drawing.Bitmap((System.Drawing.Bitmap)System.Drawing.Image.FromFile(Application.StartupPath + "/user/userFace_b.jpg"), 84, 84);
            if (icon != null)
            {
                try
                { 
                    //画了2个边框,一个是logo,一个在logo周围加了一个边框
                    using (var graphics = System.Drawing.Graphics.FromImage(bitmap))
                    {
                        graphics.DrawImage(bits2, (bitmap.Width - bits2.Width) / 2, (bitmap.Height - bits2.Height) / 2);
                        graphics.DrawImage(icon, (bitmap.Width - icon.Width) / 2, (bitmap.Height - icon.Height) / 2);

}

}
                catch (Exception ex)
                {

}
                finally
                {
                    icon.Dispose();
                    GC.Collect();

}
            }
            bitmap.Save(fileName, ImageFormat.Jpeg);
        }

}

return bitmap;
}

代码如下:

public class ImageCut
  {

/// <summary>
      /// 剪裁 -- 用GDI+
      /// </summary>
      /// <param name="b">原始Bitmap</param>
      /// <param name="StartX">开始坐标X</param>
      /// <param name="StartY">开始坐标Y</param>
      /// <param name="iWidth">宽度</param>
      /// <param name="iHeight">高度</param>
      /// <returns>剪裁后的Bitmap</returns>
      public Bitmap KiCut(Bitmap b)
      {
          if (b == null)
          {
              return null;
          }
          int w = b.Width;
          int h = b.Height;
          int intWidth = 0;
          int intHeight = 0;
          if (h * Width / w > Height)
          {
              intWidth = Width;
              intHeight = h * Width / w;

}
          else if (h * Width / w < Height)
          {
              intWidth = w * Height / h;
              intHeight = Height;

}
          else
          {
              intWidth = Width;
              intHeight = Height;
          }

Bitmap bmpOut_b = new System.Drawing.Bitmap(b, intWidth, intHeight);
          w = bmpOut_b.Width;
          h = bmpOut_b.Height;

if (X >= w || Y >= h)
          {
              return null;
          }

if (X + Width > w)
          {
              Width = w - X;
          }
          else
          {
              X = (w-Width) / 2;
          }

if (Y + Height > h)
          {
              Height = h - Y;
          }

try
          {
              Bitmap bmpOut = new Bitmap(Width, Height, PixelFormat.Format24bppRgb);            
              Graphics g = Graphics.FromImage(bmpOut);
              g.DrawImage(bmpOut_b, new Rectangle(0, 0, Width, Height), new Rectangle(X, Y, Width, Height), GraphicsUnit.Pixel);
              g.Dispose();

return bmpOut;
          }
          catch
          {
              return null;
          }
      }

public int X = 0;
      public int Y = 0;
      public int Width = 120;
      public int Height = 120;
      public ImageCut(int x, int y, int width, int heigth)
      {
          X = x;
          Y = y;
          Width = width;
          Height = heigth;
      }
  }

代码如下:

private void btnSubmit_Click(object sender, EventArgs e)
        {
            string UserId = "1245460396";

string curFilePath = "/user/";

string curFileName_b = "DimensionalPig_" + UserId + "_b";
            string path = Application.StartupPath + curFilePath;
            if (Directory.Exists(path) == false)//如果不存在就创建file文件夹
            {
                Directory.CreateDirectory(path);
            }
            string fileName_b = Application.StartupPath + curFilePath + "/" + curFileName_b + ".jpg";//获得上传文件名

string UserUrl = string.Format("http://www.jb51.net/u{0}", UserId.Trim());
            string userFace_b = Application.StartupPath + "/user/" + UserId + "_b.jpg";

Bitmap bitmap_b = GetCodeImgUrl(fileName_b.Replace("_b.", "_b_ewm."), UserUrl, 400, 400, userFace_b);
            this.p.Image =(System.Drawing.Image)bitmap_b;
this.p.Image.Save(fileName_b.Replace("_b.", "_b_ewm."));

(0)

相关推荐

  • 详解ZXing-core生成二维码的方法并解析

    二维码无处不在,扫一扫有礼品哦,现在二维码这么流行,想必大家不是很清楚二维码是怎么生成的吧,现在小编通过给大家分享本文帮助大家学习二维码生成的方法. 其实主要是利用goggle发布的jar来使用的此功能. 1.二维码的生成 将Zxing-core.jar 包加入到classpath下. 二维码的生成需要借助MatrixToImageWriter类,该类是由Google提供的,可以将该类拷贝到源码中,这里我将该类的源码贴上,可以直接使用. 直接可以生成二维码的代码 public void test

  • java中ZXing 生成、解析二维码图片的小示例

    概述 ZXing 是一个开源 Java 类库用于解析多种格式的 1D/2D 条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME.J2SE和Android. 官网:ZXing github仓库 实战 本例演示如何在一个非 android 的 Java 项目中使用 ZXing 来生成.解析二维码图片. 安装 maven项目只需引入依赖: <dependency> <groupId>com.google.zxing

  • Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题

    先给大家展示下效果图: 扫描内容是下面这张,二维码是用zxing库生成的 由于改了好几个类,还是去年的事都忘得差不多了,所以只能上这个类的代码了,主要就是改了这个CaptureActivity.java package com.zxing.activity; import java.io.IOException; import java.util.Vector; import android.app.Activity; import android.content.Intent; import

  • Android基于google Zxing实现二维码的生成

    最近项目用到了二维码的生成与识别,之前没有接触这块,然后就上网搜了搜,发现有好多这方面的资源,特别是google Zxing对二维码的封装,实现的已经不错了,可以直接拿过来引用,下载了他们的源码后,只做了少少的改动,就是在Demo中增加了长按识别的功能,网上虽然也有长按识别的Demo,但好多下载下来却无法运行,然后总结了一下,加在了下面的Demo中.   下面来介绍这个Demo的主类 public class BarCodeTestActivity extends Activity { priv

  • Java利用Zxing生成二维码的简单实例

    Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法,现在我简单介绍一下使用Java利用Zxing生成与解析二维码 1.二维码的生成 1.1 将Zxing-core.jar 包加入到classpath下. 1.2 二维码的生成需要借助MatrixToImageWriter类,该类是由Google提供的,可以将该类拷贝到源码中,这里我将该类的源码贴上,可以直接使用. import com.google.zxing.common.BitMatrix; i

  • C# zxing二维码写入的实例代码

    复制代码 代码如下: private void button1_Click(object sender, EventArgs e)        {            if (string.IsNullOrEmpty(this.textBox1.Text.Trim()))            {                MessageBox.Show("请输入需要转换的信息!");                return;            } string con

  • Android基于google Zxing实现各类二维码扫描效果

    随着微信的到来,二维码越来越火爆,随处能看到二维码,比如商城里面,肯德基,餐厅等等,对于二维码扫描我们使用的是google的开源框架Zxing,我们可以去http://code.google.com/p/zxing/下载源码和Jar包,之前我项目中的二维码扫描功能只实现了扫描功能,其UI真的是其丑无比,一个好的应用软件,其UI界面也要被大众所接纳,不然人家就不会用你的软件啦,所以说应用软件功能和界面一样都很重要,例如微信,相信微信UI被很多应用软件所模仿,我也仿照微信扫描二维码效果进行模仿,虽然

  • Android-Zxing实现二维码的扫描与生成

    Zxing: Zxing是一个开放源码,用java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口.可以实现使用手机内置摄像头完成条形码的扫描以及解码. github: https://github.com/zxing/zxing 首先在写项目的时候,我们需要导入一个moduel,主要是从Zxing中提取的主要功能代码.其地址是: http://pan.baidu.com/s/1sk9pGmT 扫描二维码: 在点击扫描二维码的页面: startActivityForResu

  • Android上使用ZXing识别条形码与二维码的方法

    目前有越来越多的手机具备自动对焦的拍摄功能,这也意味着这些手机可以具备条码扫描的功能.手机具备条码扫描的功能,可以优化购物流程,快速存储电子名片(二维码)等. 本文所述实例就使用了ZXing 1.6实现条码/二维码识别.ZXing是个很经典的条码/二维码识别的开源类库,早在很久以前,就有开发者在J2ME上使用ZXing了,只不过需要支持JSR-234规范(自动对焦)的手机才能发挥其威力,而目前已经有不少Android手机具备自动对焦的功能. 本文代码运行的结果如下,使用91手机助手截图时,无法截

  • Java中基于maven实现zxing二维码功能

    maven所需jar <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifac

随机推荐