操作图片
using SixLabors.Fonts;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Drawing.Processing;
using SixLabors.ImageSharp.Processing;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string templatePath = "./证书.jpg";
string sealPath = "./印章.png";
var templateImage = await Image.LoadAsync(templatePath);
var image = await MergeImageAsync(templateImage, sealPath, 20, 20);
image.Save("合成后的证书.png");
var templateImage2 = await Image.LoadAsync(templatePath);
var image2 = await MergeImageAsync(templateImage2, sealPath, 20, 20, 50, 50);
image2.Save("合成后的证书并改变印章大小.png");
var contestName = "山东第一届体育赛事";
var contestItemName = "田径赛项";
var studentName = "张三";
var awardName = "一等奖";
var templateImage3 = await Image.LoadAsync(templatePath);
var image3 = await MergeImageAsync(templateImage3, sealPath, 500, 500, 100, 100);
AddMultilineText(image3, contestName, 12, 100, 200);
AddMultilineText(image3, contestItemName, 12, 100, 300);
AddMultilineText(image3, studentName, 12, 100, 400);
AddMultilineText(image3, awardName, 12, 100, 500);
image3.Save("证书带文字和印章.png");
}
/// <summary>
/// 合并图片
/// </summary>
/// <param name="templateImage"></param>
/// <param name="mergeImagePath">合并图片</param>
/// <param name="x">X坐标</param>
/// <param name="y">y坐标</param>
/// <returns></returns>
public static async Task<Image> MergeImageAsync(Image templateImage, string mergeImagePath, int x, int y)
{
// 加载需要合并的图片
var mergeImage = await Image.LoadAsync(mergeImagePath);
templateImage.Mutate(o =>
{
o.DrawImage(mergeImage, new Point(x, y), 1);
});
return templateImage;
}
/// <summary>
/// 合并图片
/// </summary>
/// <param name="templateImage"></param>
/// <param name="mergeImagePath">合并图片</param>
/// <param name="x">X坐标</param>
/// <param name="y">y坐标</param>
/// <param name="width">宽度</param>
/// <param name="height">高度</param>
/// <returns></returns>
public static async Task<Image> MergeImageAsync(Image templateImage, string mergeImagePath, int x, int y, int width, int height)
{
var mergeImage = await Image.LoadAsync(mergeImagePath);
mergeImage.Mutate(m =>
{
m.Resize(new Size(width, height));
});
templateImage.Mutate(o =>
{
o.DrawImage(mergeImage, new Point(x, y), 1);
});
return templateImage;
}
/// <summary>
/// 多行文本输出
/// </summary>
/// <param name="templateImage"></param>
/// <param name="text"></param>
/// <param name="fontSize"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public static Image AddMultilineText(Image templateImage, string text, int fontSize, int x, int y)
{
var fonts = new FontCollection();
fonts.AddSystemFonts();
var fontFamily = fonts.Get("Microsoft YaHei");
var font = new Font(fontFamily, fontSize, FontStyle.Bold);
templateImage.Mutate(o =>
{
o.DrawText(text, font, Color.Black, new PointF(x, y));
});
return templateImage;
}
}