知识大全 C#中使用GDI 让网站新闻标题个性化
Posted 知
篇首语:世事洞明皆学问,人情练达即文章。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#中使用GDI 让网站新闻标题个性化相关的知识,希望对你有一定的参考价值。
C#中使用GDI 让网站新闻标题个性化 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
新华网上的 今日头条 的标题是用图片体现的 这种头条我们一般的做法可能是 使用Photoshop制作成图片 保存上传 这样需要浪费人力 比较麻烦 有没有更好的办法呢?
下面使用GDI+及C#代码 完成自动实现的过程
老规矩 先看看运行效果
下面是C#代码
// Text Image aspx// Text Image aspx csusing System; using System Data; using System Configuration; using System Collections; using System Web; using System Web Security; using System Web UI; using System Web UI WebControls; using System Web UI WebControls WebParts; using System Web UI HtmlControls; using System Drawing; using System Drawing Imaging; using System Drawing Drawing D; using System IO;
namespace BrawDraw Com Utilitypublic partial class Utility_Text Image : System Web UI Pageint _width = ; public int Widthgetreturn _width; set_width = value;
int _height = ; public int Heightgetreturn _height; set_height = value;
string _text = string Empty; public string Textgetreturn _text; set_text = value;
string _fontName = 宋体 ; public string FontNamegetreturn _fontName; set_fontName = value;
Color _fontColor = Color Black; public Color FontColorgetreturn _fontColor; set_fontColor = value;
Color _backgroundColor = Color White; public Color BackgroundColorgetreturn _backgroundColor; set_backgroundColor = value;
//华文新魏protected void Page_Load(object sender EventArgs e)if (Request QueryString[ w ] != null)trythis _width = int Parse(Request QueryString[ w ] Trim()); finally
if (Request QueryString[ h ] != null)trythis _height = int Parse(Request QueryString[ h ] Trim()); finally
if (Request QueryString[ text ] != null)this _text = Request QueryString[ text ] Trim(); else if (Request QueryString[ t ] != null)this _text = Request QueryString[ t ] Trim();
if (Request QueryString[ font ] != null)this _fontName = Request QueryString[ font ] Trim(); else if (Request QueryString[ f ] != null)this _fontName = Request QueryString[ f ] Trim(); if (this _fontName == 大黑 )this _fontName = 方正大黑简体 ; string colorString = Black ; if (Request QueryString[ color ] != null)colorString = Request QueryString[ color ] Trim(); else if (Request QueryString[ c ] != null)colorString = Request QueryString[ c ] Trim(); if (colorString StartsWith( _ ))colorString = # + colorString Remove( ); this _fontColor = ConvertColor(colorString);
string bgColorString = White ; if (Request QueryString[ bgcolor ] != null)bgColorString = Request QueryString[ bgcolor ] Trim(); else if (Request QueryString[ b ] != null)bgColorString = Request QueryString[ b ] Trim(); if (bgColorString StartsWith( _ ))bgColorString = # + bgColorString Remove( );
this _backgroundColor = ConvertColor(bgColorString);
if (!IsPostBack)CreateImage(this Text this Width this Height this FontName this FontColor this
BackgroundColor);
//根据验证字符串生成最终图象public void CreateImage(string text int width int height string fontName Color
fontColor Color backgroundColor)Bitmap theBitmap = new Bitmap(width height); Graphics theGraphics = Graphics FromImage(theBitmap); theGraphics InterpolationMode = System Drawing Drawing D InterpolationMode HighQualityBicubic; theGraphics CompositingQuality = System Drawing Drawing D CompositingQuality HighQuality; theGraphics SmoothingMode = System Drawing Drawing D SmoothingMode HighQuality; theGraphics TextRenderingHint = System Drawing Text TextRenderingHint AntiAlias; // 背景theGraphics Clear(backgroundColor);
GraphicsPath gp = new GraphicsPath(); FontFamily fontFamily; tryfontFamily = new FontFamily(fontName); catch (Exception exc)fontFamily = new FontFamily( 宋体 ); StringFormat format = new StringFormat(); format Alignment = StringAlignment Near; format LineAlignment = StringAlignment Center;
gp AddString(text fontFamily f new Point( ) format); RectangleF rectF = gp GetBounds(); float scaleX = width * f / rectF Width; float scaleY = height * f / rectF Height; float offsetX = rectF X * scaleX; float offsetY = rectF Y * scaleY; System Drawing Drawing D Matrix matrix = new Matrix(scaleX scaleY
offsetX offsetY); gp Transform(matrix); Brush newBrush = new SolidBrush(fontColor); theGraphics FillPath(newBrush gp); //theGraphics DrawRectangle(Pens Black width height );
if (gp != null) gp Dispose();
// 将生成的图片发回客户端MemoryStream ms = new MemoryStream(); theBitmap Save(ms ImageFormat Png);
Response ClearContent(); //需要输出图象信息 要修改HTTP头 Response ContentType = image/Png ; Response BinaryWrite(ms ToArray()); theGraphics Dispose(); theBitmap Dispose(); Response End();
private Color ConvertColor(string colorString)Array knownColors = System Enum GetValues(typeof(KnownColor)); foreach (object colorName in knownColors)if (colorString ToLower() == colorName ToString() ToLower())return Color FromName(colorString);
if (colorString StartsWith( # ))return ColorTranslator FromHtml(colorString);
tryint color argb = int Parse(colorString); return Color FromArgb(color argb); finally
return Color Black;
调用方法
BrawDraw Com在线生成个性化标题(其中text后面传入要显示的文字 w或width参数设置图片宽度 h或height设置图片高度 f或font设置字体 c或color设置标题的颜色 )
OK 大功告成
如果你是使用静态网页 你可以使用Javascript方式嵌入
显示效果图
或许 你的服务器上没有安装你设置的字体(关于如何取得服务器上已安装字体列表 详见这篇 ) 比如下面代码
正常的显示应该是这样
如果没有此字体显示出来的效果就是这样
原因在于我在下面代码中设置了没有该字体时 则会执行至catch (Exception exc)块内
这里使用了一般带中文操作系统的服务器上都会自动安装的 宋体 字作为默认字体
tryfontFamily = new FontFamily(fontName); catch (Exception exc)fontFamily = new FontFamily( 宋体 );
还需要更完善?我想 你可以使用Cache 以提高服务器的效率 或者是 如果你需要生成静态新闻页面 那么你可以在生成静态页面前自动调用WebService将图片保存下来 然后在静态页面中直接调用此新闻标题图片 cha138/Article/program/net/201311/12703相关参考
C#GDI+编程之基础篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一关于GDI+ 从本质
C#GDI+绘图高级编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一般来说Windows的
——篇《“最有个性的官方网站”:成都新都区网上信访平台不设防》的新闻迅速红遍全国。该政府网站坚持不删帖、有问必答,甚至不
——篇《“最有个性的官方网站”:成都新都区网上信访平台不设防》的新闻迅速红遍全国。该政府网站坚持不删帖、有问必答,甚至不删骂人帖。对此现象的正确认识是_____。A、网络是民众实现表达权和监督权的最佳
下列新闻标题中用词不当的是:_____A、今年对外贸易形势喜人,出口增速好于市场一致预期B、500万元专项资金35家企业瓜分,上海公布获扶持实体书店名单C、欧洲杯:意大利打入首粒任意球西班牙送别爱尔兰
中使用gridview显示新闻标题如何在当日新加新闻的标题后加一个new或图片 在后台或者公共类Common写如下类 publicstaticstringNew
标题是新闻内容的摘要,一则新闻,如果用一个标题概括不了内容,还可在前面加引题后面加副题,引题是对正题的补充和解释,副题起
标题是新闻内容的摘要,一则新闻,如果用一个标题概括不了内容,还可在前面加引题后面加副题,引题是对正题的补充和解释,副题起引发供托主题的作用。_____答案:错误解析:从内容来说,主题说明新闻中最重要的
C#中如何处理父窗口及其子窗口标题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如果你用MFC
phpweb程式如何把网站标题前面的"-"去掉啊? 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!p
为这段新闻拟写标题,恰当的一项是_____。A、马航组织家属沟通会B、马来西亚请求援助搜救工作C、马航与家属协商搜救工作D、马方已向多国发出外交照会答案:D解析:由“马来西亚外交部巳向南北走廊上所有国
“开门见山把新闻报道提前说出来”、“千方百计吸引启发读者让他们对这篇文章有兴趣继而阅读全文”,是用来概括__
“开门见山把新闻报道提前说出来”、“千方百计吸引启发读者让他们对这篇文章有兴趣继而阅读全文”,是用来概括_____。A、标题的职能B、导语的职能C、结尾的职能D、背景的职能答案:A解析:新闻标题是新闻