当前位置:   article > 正文

C# 封面图片生成器_c# 使用color生成图片

c# 使用color生成图片

        这个东西我已经用了有段时间了,从开始写文章就在用这个,主要原因还是因为我比较懒。懒得去寻找图片,同时又怕万一惹来版权争议。。。

跟我所有的文章的封面图一样,一个纯色背景加上文字自动生成一个指定大小的图片。

代码实现也比较简单,如果有兴趣的话,可以自己扩展,比如自定义背景图,自定义水印等。

实现功能:

    • 利用C#做一个简单的封面图片生成器

开发环境:

开发工具: Visual Studio 2013

.NET Framework版本:4.5

实现代码:

  1. private void Img_Load(object sender, EventArgs e)
  2. {
  3. init();
  4. }
  5. private void btnBg_Click(object sender, EventArgs e)
  6. {
  7. ColorDialog cd = new ColorDialog();
  8. if (cd.ShowDialog() == DialogResult.OK)
  9. {
  10. panelBgColor.BackColor = cd.Color;
  11. }
  12. }
  13. private void btnFontColor1_Click(object sender, EventArgs e)
  14. {
  15. ColorDialog cd = new ColorDialog();
  16. if (cd.ShowDialog() == DialogResult.OK)
  17. {
  18. panelFontColor1.BackColor = cd.Color;
  19. }
  20. }
  21. private void btnFontColor2_Click(object sender, EventArgs e)
  22. {
  23. ColorDialog cd = new ColorDialog();
  24. if (cd.ShowDialog() == DialogResult.OK)
  25. {
  26. panelFontColor2.BackColor = cd.Color;
  27. }
  28. }
  29. private void btnFont_Click(object sender, EventArgs e)
  30. {
  31. FontDialog fd = new FontDialog();
  32. fd.Font = txtFont.Font;
  33. if (fd.ShowDialog() == DialogResult.OK)
  34. {
  35. txtFont.Font = fd.Font;
  36. }
  37. }
  38. private void btnPre_Click(object sender, EventArgs e)
  39. {
  40. if (string.IsNullOrWhiteSpace(txtWord.Text))
  41. {
  42. MessageBox.Show("请先设置文字", "提示");
  43. return;
  44. }
  45. MemoryStream stream = new MemoryStream(CreateIamge(txtWord.Text));
  46. pictureBox1.Image = Image.FromStream(stream, true);
  47. }
  48. private void btnSave_Click(object sender, EventArgs e)
  49. {
  50. if (pictureBox1.Image == null)
  51. {
  52. MessageBox.Show("请先预览", "提示");
  53. return;
  54. }
  55. SaveFileDialog sfd = new SaveFileDialog();
  56. sfd.SupportMultiDottedExtensions = true;
  57. sfd.Filter = "PNG格式|*.png|JPG格式|*.jpg";
  58. sfd.AddExtension = true;
  59. if (sfd.ShowDialog() == DialogResult.OK)
  60. {
  61. EncoderParameters myEncoderParameters = new EncoderParameters(1);
  62. myEncoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
  63. pictureBox1.Image.Save(sfd.FileName, GetEncoderInfo("image/png"), myEncoderParameters);
  64. }
  65. }
  66. private void init()
  67. {
  68. Font font = new Font("华文行楷", 36, FontStyle.Bold);
  69. txtFont.Font = font;
  70. panelFontColor1.BackColor = ColorTranslator.FromHtml("#ff0080ff");
  71. panelFontColor2.BackColor = ColorTranslator.FromHtml("#ffff80c0");
  72. }
  73. public byte[] CreateIamge(string str)
  74. {
  75. int w = Convert.ToInt32(txtWidth.Text);
  76. int h = Convert.ToInt32(txtHeight.Text);
  77. //渐变画笔
  78. LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, w, h), panelFontColor1.BackColor, panelFontColor2.BackColor, 25f, true);
  79. Bitmap image = new Bitmap(w, h);
  80. Graphics g = Graphics.FromImage(image);
  81. //设置高质量插值法
  82. g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
  83. //设置高质量,低速度呈现平滑程度
  84. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
  85. g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
  86. //消除锯齿
  87. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  88. //填充背景色
  89. g.FillRectangle(new SolidBrush(panelBgColor.BackColor), new Rectangle(0, 0, w, h));
  90. //设置文本呈现方式
  91. g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
  92. //获取文字大小
  93. SizeF sf = g.MeasureString(str, txtFont.Font);
  94. g.DrawString(str, txtFont.Font, brush, (w - sf.Width) / 2, (h - sf.Height) / 2);
  95. MemoryStream stream = new MemoryStream();
  96. //高质量保存
  97. EncoderParameters myEncoderParameters = new EncoderParameters(1);
  98. myEncoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
  99. image.Save(stream, GetEncoderInfo("image/png"), myEncoderParameters);
  100. byte[] buffer = stream.ToArray();
  101. g.Dispose();
  102. image.Dispose();
  103. return buffer;
  104. }
  105. private static ImageCodecInfo GetEncoderInfo(String mimeType)
  106. {
  107. int j;
  108. ImageCodecInfo[] encoders;
  109. encoders = ImageCodecInfo.GetImageEncoders();
  110. for (j = 0; j < encoders.Length; ++j)
  111. {
  112. if (encoders[j].MimeType == mimeType)
  113. return encoders[j];
  114. }
  115. return null;
  116. }

实现效果:

由简入繁,拿来即用

更多精彩,请搜索公众号:Csharp 小记

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/81337
推荐阅读
相关标签
  

闽ICP备14008679号