对于GDI+,在正常的操作,Bitmap-- Graphcis -- DrawImage或者DrawString ,生成图片的话,会产生很多杂点,或者是图片质量不稳定..尤其是在读取图片后,生成缩略图之后,文件会被压缩而失真..–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
主要原因是因为没有重新设置Graphics的几个属性..–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
1.Graphics.SmoothingMode属性: 例如SmoothingMode.HighQuality可以产生高质量图片,但是效率低.–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
2.Graphics.CompositingQuality 属性: 例如:CompositingQuality.HighQuality也是产生高质量图,效率低下.–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
3.Graphics.InterpolationMode 属性,例如:InterpolationMode.HighQualityBicubic与前两个也是同样的效果.–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
这三个属性的值都是enum,具体的enum参数可以查看MSDN的说明..在这里就我不赘述..–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
如果是对图片进行放大,缩小,可以调整Graphics.CompositingQuality Graphics.InterpolationMode 两个属性..如果是图片生成,则可以调整Graphics.SmoothingMode属性..–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
另外一个问题就是关于文字生成的..按照正常的模式生成的文字,可以很明显的看到文字带有锯齿..解决的办法也是需要修改Graphics的一个属性: Graphics.TextRenderingHint...注意一点,修改TextRenderingHint的话,需要引入System.Drawing.Text,例如:Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
经过对这四个属性的修改,操作大部分的图片之后,产生的结果都是比较让人满意的..–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
在这里提供一个简单的例子..是生成印章签名的效果..提供四种字体选择..并产生一个图片..如果你的机器中没有安装指定的几种字体,你需要把字体修改一下...直接把代码拷贝..就可以看到效果...–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
ASPX页面:–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
1<%@ Page language="c#" Codebehind="underWrite.aspx.cs" AutoEventWireup="false" Inherits="testItem.movie.underWrite"–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
%>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
2<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
3<HTML>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
4    <HEAD>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
5        <title>underWrite</title>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
6        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
7        <meta name="CODE_LANGUAGE" Content="C#">–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
8        <meta name="vs_defaultClientScript" content="JavaScript">–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
9        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
10    </HEAD>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
11    <body MS_POSITIONING="GridLayout">–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
12        <form id="Form1" method="post" runat="server">–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
13            <asp:Image id="Image1" style="Z-INDEX: 101; LEFT: 208px; POSITION: absolute; TOP: 360px" runat="server"></asp:Image>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
14            <asp:HyperLink id="HyperLink1" style="Z-INDEX: 105; LEFT: 304px; POSITION: absolute; TOP: 312px"–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
15                runat="server" NavigateUrl="../mv/index.html">大头帖</asp:HyperLink>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
16            <asp:TextBox id="name" style="Z-INDEX: 104; LEFT: 208px; POSITION: absolute; TOP: 144px" runat="server"–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
17                MaxLength="4"></asp:TextBox>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
18            <asp:RadioButtonList id="fontType" style="Z-INDEX: 103; LEFT: 208px; POSITION: absolute; TOP: 184px"–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
19                runat="server" Width="240px">–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
20                <asp:ListItem Value="方正黄草简体" Selected="True">方正黄草简体</asp:ListItem>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
21                <asp:ListItem Value="汉鼎繁淡古">汉鼎繁淡古</asp:ListItem>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
22                <asp:ListItem Value="汉鼎繁印篆">汉鼎繁印篆</asp:ListItem>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
23                <asp:ListItem Value="经典繁桟亭">经典繁桟亭</asp:ListItem>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
24            </asp:RadioButtonList>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
25            <asp:Button id="bu" style="Z-INDEX: 102; LEFT: 208px; POSITION: absolute; TOP: 312px" runat="server"–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
26                Text=" 刻 字 "></asp:Button>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
27        </form>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
28    </body>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
29</HTML>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
30
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
CS文件:–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
  1using System;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
  2using System.Collections;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
  3using System.ComponentModel;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
  4using System.Data;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
  5using System.Drawing;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
  6using System.Drawing.Drawing2D;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
  7using System.IO;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
  8using System.Web;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
  9using System.Web.SessionState;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
10using System.Web.UI;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
11using System.Web.UI.WebControls;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
12using System.Web.UI.HtmlControls;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
13–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
14namespace testItem.movie–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
15{–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
16    /// <summary>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
17    ///        生成印章签名–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
18    /// </summary>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
19    public class underWrite : System.Web.UI.Page–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
20    {–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
21        protected System.Web.UI.WebControls.Image Image1;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
22        protected System.Web.UI.WebControls.RadioButtonList fontType;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
23        protected System.Web.UI.WebControls.HyperLink HyperLink1;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
24        protected System.Web.UI.WebControls.Button bu;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
25        protected System.Web.UI.WebControls.TextBox name;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
26        –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
27        private void Page_Load(object sender, System.EventArgs e) –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
28        {–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
29            Image1.Visible = false;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
30        }–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
31–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
32        #region Web 窗体设计器生成的代码–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
33        override protected void OnInit(EventArgs e)–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
34        {–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
35            //–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
36            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
37            //–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
38            InitializeComponent();–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
39            base.OnInit(e);–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
40        }–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
41        –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
42        /// <summary>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
43        /// 设计器支持所需的方法 - 不要使用代码编辑器修改–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
44        /// 此方法的内容。–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
45        /// </summary>–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
46        private void InitializeComponent()–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
47        {    –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
48            this.bu.Click += new System.EventHandler(this.Button1_Click);–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
49            this.Load += new System.EventHandler(this.Page_Load);–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
50–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
51        }–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
52        #endregion–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
53–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
54        private void Button1_Click(object sender, System.EventArgs e)–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
55        {–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
56            string Name = name.Text;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
57            if ( Name.Length < 4 ) {–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
58                Response.Write( "请输入最少4个字符!" );–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
59                return;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
60            }–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
61            –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
62            string FontName = fontType.SelectedValue;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
63            –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
64            int fontSize = 36;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
65            int x = 10;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
66            int y = 10;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
67            –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
68            switch( FontName ) {–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
69                case "方正黄草简体":–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
70                    x = -8;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
71                    y = -2;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
72                    fontSize = 42;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
73                    break;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
74                    –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
75                case "汉鼎繁淡古":–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
76                    x = -10;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
77                    y = -2;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
78                    break;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
79                –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
80                case "汉鼎繁印篆":–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
81                    x = -15;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
82                    y = -2;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
83                    break;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
84                –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
85                case "经典繁桟亭":–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
86                    fontSize = 34;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
87                    x = -10;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
88                    y = -3;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
89                    break;                    –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
90            }–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
91            –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
92            Bitmap bm = new Bitmap(110,100,System.Drawing.Imaging.PixelFormat.Format32bppArgb);–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
93            Font font = new Font(FontName,fontSize,FontStyle.Bold);–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
94            –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
95            Graphics g = Graphics.FromImage( bm );–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
96            –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
97            g.TextRenderingHint =  System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
98            –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
99            /*    这里的三个属性可以根据情况开放.–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
100            * –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
101            //g.CompositingQuality = CompositingQuality.HighQuality; –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
102            //g.SmoothingMode = SmoothingMode.HighQuality; –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
103            //g.InterpolationMode = InterpolationMode.HighQualityBicubic; –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
104            –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
105            */–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
106            g.Clear(Color.Red);        //赋予图像一个背景色–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
107            –þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
108            g.DrawString( Name.Substring(2,1),font,new SolidBrush(Color.White),0,2 );–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
109            g.DrawString( Name.Substring(3,1),font,new SolidBrush(Color.White),0,45-y );–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
110            g.DrawString( Name.Substring(0,1),font,new SolidBrush(Color.White),35-x,2 );–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
111            g.DrawString( Name.Substring(1,1),font,new SolidBrush(Color.White),35-x,45-y );–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
112            g.Dispose();–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
113            //设置保存路径–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
114            bm.Save( Server.MapPath("../upload/c.jpg"),System.Drawing.Imaging.ImageFormat.Jpeg );–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
115            bm.Dispose();–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
116            //显示产生的图片–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
117            Image1.ImageUrl = Server.MapPath("../upload/c.jpg") ;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
118            Image1.Visible = true;–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
119        }–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
120    }–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
121}–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
122
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
效果:–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß
–þÂYlåú]www.netcsharp.cnOÕ52 ÿúrß