最近项目涉及到绘制二维码,所以写了个小方法,帮助大家快速生成二维码。
核心思想:先画一个承载板,再往上画的别的图片
引用:ThoughtWorks.QRCode.dll,你们也可用别得程序集去创建二维码
/// <summary>
/// 画一个二维码(可带图标)
/// </summary>
/// <param name="encodecontent">要加密的内容</param>
/// <param name="saveurl">保存最终二维码图片的路径,不填就不保存</param>
/// <param name="iconurl">图标本地url</param>
/// <param name="iconsize">图标大小,单位像素(px)</param>
/// <param name="qrsize">二维码大小,单位像素(px)</param>
/// <returns></returns>
public static Image DrawQRImage(string encodecontent, string iconurl, int qrsize,int iconsize, string saveurl = null)
{
//准备画板
Bitmap final = new Bitmap(qrsize, qrsize);
Graphics g = Graphics.FromImage(final);
g.Clear(Color.Transparent);
// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
try
{
//画二维码
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
qrCodeEncoder.QRCodeScale = 5;
qrCodeEncoder.QRCodeVersion = 0;
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
Image qrImg = qrCodeEncoder.Encode(encodecontent);
g.DrawImage(qrImg, new Rectangle(0, 0, qrsize, qrsize), 0, 0, qrImg.Width, qrImg.Height, GraphicsUnit.Pixel);
//画图标
if(!string.IsNullOrEmpty(iconurl))
{
Image iconImg = Image.FromFile(iconurl);
g.DrawImage(iconImg, new Rectangle((qrsize - iconsize) / 2, (qrsize - iconsize) / 2, iconsize, iconsize), 0, 0, iconImg.Width, iconImg.Height, GraphicsUnit.Pixel);
}
//保存
if (!string.IsNullOrEmpty(saveurl))
{
final.Save(saveurl);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
g.Dispose();
return final;
}
结果:
那么如果想合成任意俩个图片呢??还有解决办法
/// <summary>
/// 组合俩个图片
/// </summary>
/// <param name="bgurl">背景图的本地地址</param>
/// <param name="imgurl">背景图上的图片的本地地址</param>
/// <returns></returns>
private void CombineImage(string bgurl,int bgWidth,int bgHeight,string imgurl, int imgWidth, int imgHeight)
{
try
{
Image final = Image.FromFile(bgurl);
Bitmap bt = new Bitmap(final, bgWidth, bgHeight);
Graphics g = Graphics.FromImage(bt);
//g.Clear(Color.Red);清除整个绘图面并以指定背景色填充。背景是纯色的话,使用这个方法
// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
//画图一
Image img = Image.FromFile(imgurl);
//图一相对于背景图(这里是0,0点)的坐标(40,240)
g.DrawImage(img, new Rectangle(40, 240, imgWidth, imgHeight), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel);
//。
//。
//依次类推(如果你想多张图片)
//。
//。
//如果你想保存的话
//bt.Save(@"C:\Users\MY\final.jpg");
g.Dispose();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}