使用GDI+绘制高质量图和字体

对于GDI+,在正常的操作,Bitmap-- Graphcis -- DrawImage或者DrawString ,生成图片的话,会产生很多杂点,或者是图片质量不稳定..尤其是在读取图片后,生成缩略图之后,文件会被压缩而失真..

主要原因是因为没有重新设置Graphics的几个属性..

1.Graphics.SmoothingMode属性: 例如SmoothingMode.HighQuality可以产生高质量图片,但是效率低.

2.Graphics.CompositingQuality 属性: 例如:CompositingQuality.HighQuality也是产生高质量图,效率低下.

3.Graphics.InterpolationMode 属性,例如:InterpolationMode.HighQualityBicubic与前两个也是同样的效果.

这三个属性的值都是enum,具体的enum参数可以查看MSDN的说明..在这里就我不赘述..
如果是对图片进行放大,缩小,可以调整Graphics.CompositingQuality 和Graphics.InterpolationMode 两个属性..如果是图片生成,则可以调整Graphics.SmoothingMode属性..

另外一个问题就是关于文字生成的..按照正常的模式生成的文字,可以很明显的看到文字带有锯齿..解决的办法也是需要修改Graphics的一个属性: Graphics.TextRenderingHint...注意一点,修改TextRenderingHint的话,需要引入System.Drawing.Text,例如:Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;

经过对这四个属性的修改,操作大部分的图片之后,产生的结果都是比较让人满意的..

在这里提供一个简单的例子..是生成印章签名的效果..提供四种字体选择..并产生一个图片..如果你的机器中没有安装指定的几种字体,你需要把字体修改一下...直接把代码拷贝..就可以看到效果...

ASPX页面:

程序代码
<%@ Page language="c#" Codebehind="underWrite.aspx.cs" AutoEventWireup="false" Inherits="testItem.movie.underWrite" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>underWrite</title>
        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
        <form id="Form1" method="post" runat="server">
            <asp:Image id="Image1" style="Z-INDEX: 101; LEFT: 208px; POSITION: absolute; TOP: 360px" runat="server"></asp:Image>
            <asp:HyperLink id="HyperLink1" style="Z-INDEX: 105; LEFT: 304px; POSITION: absolute; TOP: 312px"
                runat="server" NavigateUrl="../mv/index.html">大头帖</asp:HyperLink>
            <asp:TextBox id="name" style="Z-INDEX: 104; LEFT: 208px; POSITION: absolute; TOP: 144px" runat="server"
                MaxLength="4"></asp:TextBox>
            <asp:RadioButtonList id="fontType" style="Z-INDEX: 103; LEFT: 208px; POSITION: absolute; TOP: 184px"
                runat="server" Width="240px">
                <asp:ListItem Value="方正黄草简体" Selected="True">方正黄草简体</asp:ListItem>
                <asp:ListItem Value="汉鼎繁淡古">汉鼎繁淡古</asp:ListItem>
                <asp:ListItem Value="汉鼎繁印篆">汉鼎繁印篆</asp:ListItem>
                <asp:ListItem Value="经典繁桟亭">经典繁桟亭</asp:ListItem>
            </asp:RadioButtonList>
            <asp:Button id="bu" style="Z-INDEX: 102; LEFT: 208px; POSITION: absolute; TOP: 312px" runat="server"
                Text=" 刻 字 "></asp:Button>
        </form>
    </body>
</HTML>

CS文件:

程序代码
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace testItem.movie
{
    /** <summary>
    ///        生成印章签名
    /// </summary>
    public class underWrite : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Image Image1;
        protected System.Web.UI.WebControls.RadioButtonList fontType;
        protected System.Web.UI.WebControls.HyperLink HyperLink1;
        protected System.Web.UI.WebControls.Button bu;
        protected System.Web.UI.WebControls.TextBox name;
        
        private void Page_Load(object sender, System.EventArgs e)
        {
            Image1.Visible = false;
        }

Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            //
            InitializeComponent();
            base.OnInit(e);
        }
        
        /** <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {    
            this.bu.Click += new System.EventHandler(this.Button1_Click);
            this.Load += new System.EventHandler(this.Page_Load);

}
        #endregion

private void Button1_Click(object sender, System.EventArgs e)
        {
            string Name = name.Text;
            if ( Name.Length < 4 ) {
                Response.Write( "请输入最少4个字符!" );
                return;
            }
            
            string FontName = fontType.SelectedValue;
            
            int fontSize = 36;
            int x = 10;
            int y = 10;
            
            switch( FontName ) {
                case "方正黄草简体":
                    x = -8;
                    y = -2;
                    fontSize = 42;
                    break;
                  
                case "汉鼎繁淡古":
                    x = -10;
                    y = -2;
                    break;
                
                case "汉鼎繁印篆":
                    x = -15;
                    y = -2;
                    break;
                
                case "经典繁桟亭":
                    fontSize = 34;
                    x = -10;
                    y = -3;
                    break;                    
            }
            
            Bitmap bm = new Bitmap(110,100,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            Font font = new Font(FontName,fontSize,FontStyle.Bold);
            
            Graphics g = Graphics.FromImage( bm );
            
            g.TextRenderingHint =  System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
            
            /**//*    这里的三个属性可以根据情况开放.
             *
            //g.CompositingQuality = CompositingQuality.HighQuality;
            //g.SmoothingMode = SmoothingMode.HighQuality;
            //g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            
            */
            g.Clear(Color.Red);        //赋予图像一个背景色
            
            g.DrawString( Name.Substring(2,1),font,new SolidBrush(Color.White),0,2 );
            g.DrawString( Name.Substring(3,1),font,new SolidBrush(Color.White),0,45-y );
            g.DrawString( Name.Substring(0,1),font,new SolidBrush(Color.White),35-x,2 );
            g.DrawString( Name.Substring(1,1),font,new SolidBrush(Color.White),35-x,45-y );
            g.Dispose();
            //设置保存路径
            bm.Save( Server.MapPath("../upload/c.jpg"),System.Drawing.Imaging.ImageFormat.Jpeg );
            bm.Dispose();
            //显示产生的图片
            Image1.ImageUrl = Server.MapPath("../upload/c.jpg") ;
            Image1.Visible = true;
        }
    }
}

[收藏]使用GDI+绘制高质量图和字体相关推荐

  1. 使用GDI+绘制高质量图和字体(2)

    还记得前段时间的一篇文章写了"使用GDI+绘制高质量图和字体",里面用到了SmoothingMode.HighQuality,CompositingQuality.HighQual ...

  2. 使用GDI+绘制高质量图和字体

    对于GDI+,在正常的操作,Bitmap-- Graphcis -- DrawImage或者DrawString ,生成图片的话,会产生很多杂点,或者是图片质量不稳定..尤其是在读取图片后,生成缩略图 ...

  3. C#使用GDI+绘制高质量图和字体

    对于GDI+,在正常的操作,Bitmap-- Graphcis -- DrawImage或者DrawString ,生成图片的话,会产生很多杂点,或者是图片质量不稳定..尤其是在读取图片后,生成缩略图 ...

  4. C#中GDI绘制高质量平滑图形实例

    protected override void OnPaint(PaintEventArgs e)         {             try             {            ...

  5. 字体大宝库:2012年最新发布的26款高质量免费英文字体

    如今,网页设计师非常注重网页字体的运用,为了能让网站有更好的可读性和更强的吸引力,他们需要更漂亮的字体.正因为字体在网页设计中扮演着重要角色,设计师经常要花很多的时间去挑选字体.如果你正在寻找好看的免 ...

  6. 5个步骤,绘制高质量的业务流程图

    01 绘制业务流程图存在的问题 产品经理在梳理业务时,经常会用到业务流程图.绘制业务流程图,是产品经理的基本功. 然而,由于缺乏正确的方法和足够的训练,不少产品经理绘制的业务流程图,存在一些问题.这些 ...

  7. pb 哪里找到系统图标_建议收藏的7个高质量图标网站,一网打尽图标素材

    大家好,这里是@秋叶PPT 图标是 PPT 制作中经常用到的元素之一,其比文字生动,比图片简洁的特性,应用在 PPT 中可以极大地提高页面的可阅读性,从而深受广大 PPT 爱好者喜爱. 那应该到哪里可 ...

  8. 【建议收藏】6款高质量Windows软件,好用到无法拒绝

    买了新电脑,当然要装软件啦!今天小葱给大家推荐6款超级好用的Windows神级软件,每一款都好用到无法拒绝! 1. 野葱 首先要介绍的肯定是我们野葱录屏啦,毕竟它无广告.无捆绑.无水印.还没有时间限制 ...

  9. 英文手绘字体_40种免费的高质量手绘字体

    与衬线字体家族不同,这些手绘字体看起来不太严重,但是无论在何处使用它们,都倾向于给人以强烈的人文感. 手绘字体很难单独使用,但在以下情况下它们是最完美的: 如果您受到启发使您的新网页设计具有草图或手绘 ...

  10. 10 个案例分享几个 Python 可视化小技巧,助你绘制高质量图表

    作者 | 俊欣 来源 | 关于数据分析与可视化 一般在Python当中,我们用于绘制图表的模块最基础的可能就是matplotlib了,今天小编分享几个用该模块进行可视化制作的技巧,帮助你绘制出更加高质 ...

最新文章

  1. 使用Chrome扩展金山词霸取词划意
  2. java初学者笔记总结day9
  3. 西安交通大学2019计算机复试方案,西安交通大学2019年招收硕士研究生复试体检通知...
  4. iOS - 使用 SQLite 数据库实现数据持久化
  5. java统计文本中英文单词个数split_零基础入门NLP - 新闻文本分类Task2(天池入门赛)...
  6. 协方差 之 随机变量间的协方差及向量之间的协方差之间的微妙的区别
  7. bootstrap4 左侧导航栏 优秀 大气_制作动态效果的后台导航栏——左侧导航
  8. 2阶节IIR算法C语言源码
  9. Kafka配置文件及解释
  10. 【恋上数据结构】排序算法前置知识及代码环境准备
  11. 程序员面试头条被拒,一年后逆袭拿到offer【巴分巴秒】
  12. 文本处理命令--uniq
  13. 小白白红队初成长(2)主动信息收集
  14. 85篇精彩的经典古文
  15. Mybatis-四大神兽
  16. 检测点云中的目标(ROS2 Tao-PointPillars)
  17. xbox one 手柄在ubuntu下的使用和开发
  18. (2)Django---用命令创建项目
  19. 第四章课后习题-用Python实现羊车门问题,最大公约数计算,猜字游戏,统计不同字符个数。
  20. 基于javaweb的旅游管理系统(java+jsp+html5+bootstrap+servlet+mysql)

热门文章

  1. Hadoop | 初学基础原理
  2. [计算机视觉多视图几何] -- Homography
  3. 一文读懂社交网络分析(附应用、前沿、学习资源)
  4. 铁三角- 倒数348天
  5. 将远程linux中的文件拷贝过来,Linux之间远程拷贝文件
  6. 程序员考证之信息系统项目管理师
  7. Ubuntu20.04Server双网卡问题
  8. wav转mp3,wav转换成mp3
  9. EA使用小技巧-控制图面拷贝时的边框
  10. 并联机构逆运动学用MapleSim符号来解决