c#裁剪图片后使用zxing生成二维码示例分享_C#教程-查字典教程网
c#裁剪图片后使用zxing生成二维码示例分享
c#裁剪图片后使用zxing生成二维码示例分享
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下://////生成二维码//////生成二维码路径///生成的内容///二维码宽///二维码高///需生成的Logo图片//...

复制代码 代码如下:

/// <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."));

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C#教程学习
    热门C#教程学习
    编程开发子分类