C# · 12月 26, 2021

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,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,Width,Height),new Rectangle(X,Y,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 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,userFace_b);
this.p.Image =(System.Drawing.Image)bitmap_b;
this.p.Image.Save(fileName_b.Replace(“_b.”,”_b_ewm.”));