这个东西我已经用了有段时间了,从开始写文章就在用这个,主要原因还是因为我比较懒。懒得去寻找图片,同时又怕万一惹来版权争议。。。
跟我所有的文章的封面图一样,一个纯色背景加上文字自动生成一个指定大小的图片。
代码实现也比较简单,如果有兴趣的话,可以自己扩展,比如自定义背景图,自定义水印等。
利用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; } |