运用 System.Drawing 绘制卡片 (解决:去掉DrawString写出的字体黑边)
该功能配合卡片彩色打印机和RFID卡制作人员信息卡片,主要用于人员身份信息的核实。
引用 system.drawing
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; //去掉字体黑边
效果图和源代码如下:
using System;
using System.Drawing;
namespace TestImage
{
class Program
{
static void Main(string[] args)
{
Image image = Image.FromFile(@"C:\Users\MelanceXin\source\repos\TestImage\TestImage\bin\Debug\image.png");
Image codeImage = Image.FromFile(@"C:\Users\MelanceXin\source\repos\TestImage\TestImage\bin\Debug\code.jpg");
Person person = new Person
{
name = "曾振帅",
org_name = "天津某某某某有限公司",
personal_type_name = "现场负责人",
work_type_name = "高压安装修造作业"
};
//保存制好之后的图片的完整路径
string empcard_path = @"C:\Users\MelanceXin\source\repos\TestImage\TestImage\bin\Debug\pic\empcard.jpg";
bool b = CreateImageModel(person, image, codeImage, empcard_path);
image.Dispose();
codeImage.Dispose();
string result = b ? "制卡成功!!!!!" : "制卡失败!!";
Console.WriteLine(result);
Console.ReadKey();
}
/// <summary>
/// 绘制卡片
/// </summary>
/// <param name="picimage"></param>
/// <param name="codeimage"></param>
/// <param name="empcard_path"></param>
/// <returns></returns>
public static bool CreateImageModel(Person person, Image picimage, Image codeimage, string empcard_path)
{
Image image = Image.FromFile(@"C: \Users\MelanceXin\source\repos\TestImage\TestImage\bin\Debug\0.png");
Bitmap bitmap = new Bitmap(image);
Graphics g = Graphics.FromImage(image);
try
{
bitmap = new Bitmap(image, new Size(1024, 638));
bitmap.SetResolution(300, 300);
g = Graphics.FromImage(bitmap);
//标题
StringFormat format = new StringFormat();
format.LineAlignment = StringAlignment.Center; // 更正: 垂直居中
format.Alignment = StringAlignment.Center; // 水平居中
StringFormat format1 = new StringFormat();
format1.LineAlignment = StringAlignment.Center; // 更正: 垂直居中
format1.Alignment = StringAlignment.Near; // 水平居左
StringFormat format2 = new StringFormat();
format2.LineAlignment = StringAlignment.Center; // 更正: 垂直居中
format2.Alignment = StringAlignment.Far; // 水平居右
//证件照
Image id_image = picimage;
RectangleF id_rec = new Rectangle(new Point(130, 140), new Size(250, 320));
g.DrawImage(id_image, id_rec);
//二维码
Image qrcode_image = codeimage;
//Image qrcode_image = Image.FromFile(@_empinfo.Qrcode_path);
RectangleF qrcode_rec = new Rectangle(new Point(630, 240), new Size(320, 320));
g.DrawImage(qrcode_image, qrcode_rec);
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; //去掉字体黑边
//文字信息
//人员姓名
RectangleF nameval_rec = new Rectangle(new Point(20, 470), new Size(480, 60));
g.DrawString(person.name, new Font("黑体", 12f, (FontStyle.Bold)), new SolidBrush(Color.FromArgb(95, 95, 95)), nameval_rec, format);
//公司名称
RectangleF coval_rec = new Rectangle(new Point(20, 510), new Size(480, 100));
//g.DrawString(person_.org_name, new Font("黑体", 7f), Brushes.LightGray, coval_rec, format);
g.DrawString(person.org_name, new Font("宋体", 7f), new SolidBrush(Color.FromArgb(95, 95, 95)), coval_rec, format);
//人员类别
RectangleF type_rec = new Rectangle(new Point(600, 50), new Size(340, 60));
g.DrawString(person.personal_type_name, new Font("微软雅黑", 10f), Brushes.White, type_rec, format2);
////工种
RectangleF worktype_rec = new Rectangle(new Point(600, 110), new Size(340, 50));
g.DrawString(person.work_type_name, new Font("微软雅黑", 7f), Brushes.White, worktype_rec, format2);
bitmap.Save(empcard_path);
}
finally
{
image.Dispose();
bitmap.Dispose();
g.Dispose();
}
return true;
}
}
public class Person
{
public string name;
public string org_name;
public string personal_type_name;
public string work_type_name;
}
}