操作图片

    1. using SixLabors.Fonts;
    2. using SixLabors.ImageSharp;
    3. using SixLabors.ImageSharp.Drawing.Processing;
    4. using SixLabors.ImageSharp.Processing;
    5. using System.Threading.Tasks;
    6. class Program
    7. {
    8. static async Task Main()
    9. {
    10. string templatePath = "./证书.jpg";
    11. string sealPath = "./印章.png";
    12. var templateImage = await Image.LoadAsync(templatePath);
    13. var image = await MergeImageAsync(templateImage, sealPath, 20, 20);
    14. image.Save("合成后的证书.png");
    15. var templateImage2 = await Image.LoadAsync(templatePath);
    16. var image2 = await MergeImageAsync(templateImage2, sealPath, 20, 20, 50, 50);
    17. image2.Save("合成后的证书并改变印章大小.png");
    18. var contestName = "山东第一届体育赛事";
    19. var contestItemName = "田径赛项";
    20. var studentName = "张三";
    21. var awardName = "一等奖";
    22. var templateImage3 = await Image.LoadAsync(templatePath);
    23. var image3 = await MergeImageAsync(templateImage3, sealPath, 500, 500, 100, 100);
    24. AddMultilineText(image3, contestName, 12, 100, 200);
    25. AddMultilineText(image3, contestItemName, 12, 100, 300);
    26. AddMultilineText(image3, studentName, 12, 100, 400);
    27. AddMultilineText(image3, awardName, 12, 100, 500);
    28. image3.Save("证书带文字和印章.png");
    29. }
    30. /// <summary>
    31. /// 合并图片
    32. /// </summary>
    33. /// <param name="templateImage"></param>
    34. /// <param name="mergeImagePath">合并图片</param>
    35. /// <param name="x">X坐标</param>
    36. /// <param name="y">y坐标</param>
    37. /// <returns></returns>
    38. public static async Task<Image> MergeImageAsync(Image templateImage, string mergeImagePath, int x, int y)
    39. {
    40. // 加载需要合并的图片
    41. var mergeImage = await Image.LoadAsync(mergeImagePath);
    42. templateImage.Mutate(o =>
    43. {
    44. o.DrawImage(mergeImage, new Point(x, y), 1);
    45. });
    46. return templateImage;
    47. }
    48. /// <summary>
    49. /// 合并图片
    50. /// </summary>
    51. /// <param name="templateImage"></param>
    52. /// <param name="mergeImagePath">合并图片</param>
    53. /// <param name="x">X坐标</param>
    54. /// <param name="y">y坐标</param>
    55. /// <param name="width">宽度</param>
    56. /// <param name="height">高度</param>
    57. /// <returns></returns>
    58. public static async Task<Image> MergeImageAsync(Image templateImage, string mergeImagePath, int x, int y, int width, int height)
    59. {
    60. var mergeImage = await Image.LoadAsync(mergeImagePath);
    61. mergeImage.Mutate(m =>
    62. {
    63. m.Resize(new Size(width, height));
    64. });
    65. templateImage.Mutate(o =>
    66. {
    67. o.DrawImage(mergeImage, new Point(x, y), 1);
    68. });
    69. return templateImage;
    70. }
    71. /// <summary>
    72. /// 多行文本输出
    73. /// </summary>
    74. /// <param name="templateImage"></param>
    75. /// <param name="text"></param>
    76. /// <param name="fontSize"></param>
    77. /// <param name="x"></param>
    78. /// <param name="y"></param>
    79. /// <returns></returns>
    80. public static Image AddMultilineText(Image templateImage, string text, int fontSize, int x, int y)
    81. {
    82. var fonts = new FontCollection();
    83. fonts.AddSystemFonts();
    84. var fontFamily = fonts.Get("Microsoft YaHei");
    85. var font = new Font(fontFamily, fontSize, FontStyle.Bold);
    86. templateImage.Mutate(o =>
    87. {
    88. o.DrawText(text, font, Color.Black, new PointF(x, y));
    89. });
    90. return templateImage;
    91. }
    92. }