这个东西我已经用了有段时间了,从开始写文章就在用这个,主要原因还是因为我比较懒。懒得去寻找图片,同时又怕万一惹来版权争议。。。
跟我所有的文章的封面图一样,一个纯色背景加上文字自动生成一个指定大小的图片。
代码实现也比较简单,如果有兴趣的话,可以自己扩展,比如自定义背景图,自定义水印等。
实现功能
利用c#做一个简单的封面图片生成器
开发环境
开发工具: visual studio 2013
.net framework版本:4.5
实现代码
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; }
实现效果
到此这篇关于c#实现封面图片生成器的示例代码的文章就介绍到这了,更多相关c#封面图片生成器内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!