C语言
主页 > 软件编程 > C语言 >

C#实现封面图片生成器的代码

2022-08-22 | 佚名 | 点击:

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

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

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

实现功能

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

开发环境

开发工具: Visual Studio 2013

.NET Framework版本:4.5

实现代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

private void Img_Load(object sender, EventArgs e)

     {

         init();

     }

     private void btnBg_Click(object sender, EventArgs e)

     {

         ColorDialog cd = new ColorDialog();

         if (cd.ShowDialog() == DialogResult.OK)

         {

             panelBgColor.BackColor = cd.Color;

         }

     }

 

     private void btnFontColor1_Click(object sender, EventArgs e)

     {

         ColorDialog cd = new ColorDialog();

         if (cd.ShowDialog() == DialogResult.OK)

         {

             panelFontColor1.BackColor = cd.Color;

         }

     }

 

     private void btnFontColor2_Click(object sender, EventArgs e)

     {

         ColorDialog cd = new ColorDialog();

         if (cd.ShowDialog() == DialogResult.OK)

         {

             panelFontColor2.BackColor = cd.Color;

         }

     }

 

     private void btnFont_Click(object sender, EventArgs e)

     {

         FontDialog fd = new FontDialog();

         fd.Font = txtFont.Font;

         if (fd.ShowDialog() == DialogResult.OK)

         {

             txtFont.Font = fd.Font;

         }

     }

 

     private void btnPre_Click(object sender, EventArgs e)

     {

         if (string.IsNullOrWhiteSpace(txtWord.Text))

         {

             MessageBox.Show("请先设置文字", "提示");

             return;

         }

         MemoryStream stream = new MemoryStream(CreateIamge(txtWord.Text));

         pictureBox1.Image = Image.FromStream(stream, true);

     }

 

     private void btnSave_Click(object sender, EventArgs e)

     {

         if (pictureBox1.Image == null)

         {

             MessageBox.Show("请先预览", "提示");

             return;

         }

 

         SaveFileDialog sfd = new SaveFileDialog();

         sfd.SupportMultiDottedExtensions = true;

         sfd.Filter = "PNG格式|*.png|JPG格式|*.jpg";

         sfd.AddExtension = true;

         if (sfd.ShowDialog() == DialogResult.OK)

         {

             EncoderParameters myEncoderParameters = new EncoderParameters(1);

             myEncoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);

             pictureBox1.Image.Save(sfd.FileName, GetEncoderInfo("image/png"), myEncoderParameters);

         }

     }

 

     private void init()

     {

         Font font = new Font("华文行楷", 36, FontStyle.Bold);

         txtFont.Font = font;

         panelFontColor1.BackColor = ColorTranslator.FromHtml("#ff0080ff");

         panelFontColor2.BackColor = ColorTranslator.FromHtml("#ffff80c0");

     }

 

     public byte[] CreateIamge(string str)

     {

         int w = Convert.ToInt32(txtWidth.Text);

         int h = Convert.ToInt32(txtHeight.Text);

 

         //渐变画笔

         LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, w, h), panelFontColor1.BackColor, panelFontColor2.BackColor, 25f, true);

         Bitmap image = new Bitmap(w, h);

 

         Graphics g = Graphics.FromImage(image);

 

         //设置高质量插值法  

         g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

 

         //设置高质量,低速度呈现平滑程度  

         g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

         g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

 

         //消除锯齿

         g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

 

         //填充背景色

         g.FillRectangle(new SolidBrush(panelBgColor.BackColor), new Rectangle(0, 0, w, h));

         //设置文本呈现方式

         g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;

         //获取文字大小

         SizeF sf = g.MeasureString(str, txtFont.Font);

 

         g.DrawString(str, txtFont.Font, brush, (w - sf.Width) / 2, (h - sf.Height) / 2);

 

         MemoryStream stream = new MemoryStream();

         //高质量保存

         EncoderParameters myEncoderParameters = new EncoderParameters(1);

         myEncoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);

         image.Save(stream, GetEncoderInfo("image/png"), myEncoderParameters);

 

         byte[] buffer = stream.ToArray();

         g.Dispose();

         image.Dispose();

         return buffer;

     }

 

     private static ImageCodecInfo GetEncoderInfo(String mimeType)

     {

         int j;

         ImageCodecInfo[] encoders;

         encoders = ImageCodecInfo.GetImageEncoders();

         for (j = 0; j < encoders.Length; ++j)

         {

             if (encoders[j].MimeType == mimeType)

                 return encoders[j];

         }

         return null;

     }

实现效果

原文链接:https://blog.csdn.net/qq_27410185/article/details/126116700
相关文章
最新更新