首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 认证考试-> 软件水平考试
分享动态生成文字图片解决方案_c#应用
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 

       大家都知道我们如果想把网页上的文字做出比较炫的效果,便只能用POTOSHOP、FIREWORK等图像处理软件把文字做成图片来实现,因为这样才不会依赖浏览者的字体、浏览器类型等。可是在我们的WEB应用中又往往是动态的文字,我们便不能用图像处理软件来处理了,只能让WEB程序动态生成,幸运地是.Net Framework给我们提供了便利,下面我们就利用System.Drawing命名空间下的Bitmap类与Graphics类来编写一个生成文字图片的类,使用该类生成图片时能满足以下需求:
1、可以指定文字字体、大小和颜色(注:指定的文字在WEB服务器上需要有该字库);
2、可以加文字阴影;
3、可以指定文字的透明度;
4、可以指定背景图片或背景颜色;
5、可以指定生成的图片大小(宽度与高度);
6、可以指定文字的位置(左边距和上边距);
7、当用户设定的文字字号太大,能自动调整文字大小使之能适应生成图片的大小。

该类实现代码如下:

  1using System.Drawing;
  2using System.Drawing.Drawing2D;
  3using System.Drawing.Imaging;
  4
  5namespace Ycweb.Controls.Utility
  6{
  7    /**//// <summary>
  8    /// WaterMark
  9    /// </summary>
 10    public class Watermark
 11    {
 12        private int _width;
 13        private int _height;
 14        private string _fontFamily;
 15        private int _fontSize;
 16        private bool _adaptable;
 17        private FontStyle _fontStyle;
 18        private bool _shadow;
 19        private string _backgroundImage;
 20        private Color _bgColor;
 21        private int _left;
 22        private string _resultImage;
 23        private string _text;
 24        private int _top;
 25        private int _alpha;
 26        private int _red;
 27        private int _green;
 28        private int _blue;
 29        private long _quality;
 30
 31
 32
 33        public Watermark()
 34        {
 35            //
 36            // TODO: Add constructor logic here
 37            //
 38            _width=460;
 39            _height=30;
 40            _fontFamily = "华文行楷";
 41            _fontSize = 20;
 42            _fontStyle=FontStyle.Regular;
 43            _adaptable=true;
 44            _shadow=false;
 45            _left = 0;
 46            _top = 0;
 47            _alpha = 255;
 48            _red = 0;
 49            _green = 0;
 50            _blue = 0;
 51            _backgroundImage="";
 52            _quality=100;
 53            _bgColor=Color.FromArgb(255,229,229,229);
 54           
 55        }
 56
 57        /**//// <summary>
 58        /// 字体
 59        /// </summary>
 60        public string FontFamily
 61        {
 62            set { this._fontFamily = value; }
 63        }
 64
 65        /**//// <summary>
 66        /// 文字大小
 67        /// </summary>
 68        public int FontSize
 69        {
 70            set { this._fontSize = value; }
 71        }
 72
 73        /**//// <summary>
 74        /// 文字风格
 75        /// </summary>
 76        public FontStyle FontStyle
 77        {
 78            get{return _fontStyle;}
 79            set{_fontStyle = value;}
 80        }
 81
 82        /**//// <summary>
 83        /// 透明度0-255,255表示不透明
 84        /// </summary>
 85        public int Alpha
 86        {
 87            get { return _alpha; }
 88            set { _alpha = value; }
 89        }
 90
 91        /**//// <summary>
 92        /// 水印文字是否使用阴影
 93        /// </summary>
 94        public bool Shadow
 95        {
 96            get { return _shadow; }
 97            set { _shadow = value; }
 98        }
 99
100        public int Red
101        {
102            get { return _red; }
103            set { _red = value; }
104        }
105
106        public int Green
107        {
108            get { return _green; }
109            set { _green = value; }
110        }
111
112        public int Blue
113        {
114            get { return _blue; }
115            set { _blue = value; }
116        }
117
118        /**//// <summary>
119        /// 底图
120        /// </summary>
121        public string BackgroundImage
122        {
123            set { this._backgroundImage = value; }
124        }
125
126        /**//// <summary>
127        /// 水印文字的左边距
128        /// </summary>
129        public int Left
130        {
131            set { this._left = value; }
132        }
133
134       
135        /**//// <summary>
136        /// 水印文字的顶边距
137        /// </summary>
138        public int Top
139        {
140            set { this._top = value; }
141        }
142
143        /**//// <summary>
144        /// 生成后的图片
145        /// </summary>
146        public string ResultImage
147        {
148            set { this._resultImage = value; }
149        }
150
151        /**//// <summary>
152        /// 水印文本
153        /// </summary>
154        public string Text
155        {
156            set { this._text = value; }
157        }
158
159       
160        /**//// <summary>
161        /// 生成图片的宽度
162        /// </summary>
163        public int Width
164        {
165            get { return _width; }
166            set { _width = value; }
167        }
168
169        /**//// <summary>
170        /// 生成图片的高度
171        /// </summary>
172        public int Height
173        {
174            get { return _height; }
175            set { _height = value; }
176        }
177
178        /**//// <summary>
179        /// 若文字太大,是否根据背景图来调整文字大小,默认为适应
180        /// </summary>
181        public bool Adaptable
182        {
183            get { return _adaptable; }
184            set { _adaptable = value; }
185        }
186
187        public Color BgColor
188        {
189            get { return _bgColor; }
190            set { _bgColor = value; }
191        }
192
193        /**//// <summary>
194        /// 输出图片质量,质量范围0-100,类型为long
195        /// </summary>
196        public long Quality
197        {
198            get { return _quality; }
199            set { _quality = value; }
200        }
201
202        /**//// <summary>
203        /// 立即生成水印效果图
204        /// </summary>
205        /// <returns>生成成功返回true,否则返回false</returns>
206        public bool Create()
207        {
208            try
209            {
210                Bitmap bitmap;
211                Graphics g;
212
213                //使用纯背景色
214                if(this._backgroundImage.Trim()=="")
215                {
216                    bitmap = new Bitmap(this._width, this._height, PixelFormat.Format64bppArgb);
217                    g = Graphics.FromImage(bitmap);
218                    g.Clear(this._bgColor);
219                }
220                else
221                {
222                    bitmap = new Bitmap(Image.FromFile(this._backgroundImage));
223                    g = Graphics.FromImage(bitmap);
224                }
225                g.SmoothingMode = SmoothingMode.HighQuality;
226                g.InterpolationMode = InterpolationMode.HighQualityBicubic;
227                g.CompositingQuality=CompositingQuality.HighQuality;
228
229                Font f = new Font(_fontFamily, _fontSize,_fontStyle);
230                SizeF size = g.MeasureString(_text, f);
231               
232                // 调整文字大小直到能适应图片尺寸
233                while(_adaptable==true && size.Width > bitmap.Width)
234                {
235                    _fontSize--;
236                    f = new Font(_fontFamily, _fontSize, _fontStyle);
237                    size = g.MeasureString(_text, f);
238                }
239               
240                Brush b = new SolidBrush(Color.FromArgb(_alpha, _red, _green, _blue));
241                StringFormat StrFormat = new StringFormat();
242                StrFormat.Alignment = StringAlignment.Near;
243
244                if(this._shadow)
245                {
246                    Brush b2=new SolidBrush(Color.FromArgb(90, 0, 0, 0));
247                    g.DrawString(_text, f, b2,_left+2, _top+1);
248                }
249                g.DrawString(_text, f, b, new PointF(_left, _top), StrFormat);
250               
251                bitmap.Save(this._resultImage, ImageFormat.Jpeg);
252                bitmap.Dispose();
253                g.Dispose();
254                return true;
255            }
256            catch
257            {
258                return false;
259            }
260        }
261    }
262
263
264}
调用则相当简单,在此不予赘述,特把我使用的效果抓个图,以供大家参考

出处:http://aspsir.cnblogs.com/archive/2006/04/30/389513.html


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·省市联动菜单的源代码实现(access数据库版)-ASP教程,数据库相关
·【HTML】打开页面时按照指定的URL直接跳转到另一新页面-ASP教程,脚本编码
·多功能DataGrid打印类(WinForm C#)-.NET教程,C#语言
·我也来谈WEB打印。-ASP教程,打印相关
·C#中的泛型 (From dotNet SDK 2.0 Beta1)-.NET教程,C#语言
·J2EE WEB层的曙光 -- JSF-JSP教程,J2EE/EJB/服务器
·C#:获得文件版本信息及只读文件的删除-.NET教程,C#语言
·[ASP.NET]按键跳转以及按Enter以不同参数提交,及其他感应事件-.NET教程,Asp.Net开发
·谈基于.net平台windows开发中的模式窗体-.NET教程,.NET Framework
·ASP.NET 2.0 中实现 Treeview 与数据库的绑定(含代码)-.NET教程,Asp.Net开发
最新文章
·中文版windows xp系统升级sp3新鲜体验_windows xp
·十个提高windows vista系统性能的秘密_windows vista
·用搏客blog月收入200美圆_网赚技巧
·google 禁止使用在线广告宣传adsense推介_网赚技巧
·做广告联盟的站长必读规则_网赚技巧
·刘润:用c2c模式运作捐献公益组织_站长访谈
·seo资料站长丘仕达访谈:整站优化心得_站长访谈
·易被忽视的优化网站设计的五种方法_站长心得
·photoshop非主流照片:可爱红脸蛋美女_photoshop教程
·如何让网民爱上你的网站?(1)_站长心得
相关主题
西部数码虚拟主机

友情链接
CNNIC 西部数码
万网 自助建站
虚拟主机 asp空间
域名注册 域名
域名申请 主页空间
论坛空间 网站空间
国际域名 虚拟空间
空间租用 DDOS防火墙
成都主机托管 四川主机托管
主机租用 服务器租用
网站目录 自助建站
虚拟主机 网址大全
软件下载
自助链接
虚拟主机资讯 特价虚拟主机
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
发表评论 打印  刷新     关闭