[收藏]使用GDI+绘制高质量图和字体
使用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页面:
<!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.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+绘制高质量图和字体相关推荐
- 使用GDI+绘制高质量图和字体(2)
还记得前段时间的一篇文章写了"使用GDI+绘制高质量图和字体",里面用到了SmoothingMode.HighQuality,CompositingQuality.HighQual ...
- 使用GDI+绘制高质量图和字体
对于GDI+,在正常的操作,Bitmap-- Graphcis -- DrawImage或者DrawString ,生成图片的话,会产生很多杂点,或者是图片质量不稳定..尤其是在读取图片后,生成缩略图 ...
- C#使用GDI+绘制高质量图和字体
对于GDI+,在正常的操作,Bitmap-- Graphcis -- DrawImage或者DrawString ,生成图片的话,会产生很多杂点,或者是图片质量不稳定..尤其是在读取图片后,生成缩略图 ...
- C#中GDI绘制高质量平滑图形实例
protected override void OnPaint(PaintEventArgs e) { try { ...
- 字体大宝库:2012年最新发布的26款高质量免费英文字体
如今,网页设计师非常注重网页字体的运用,为了能让网站有更好的可读性和更强的吸引力,他们需要更漂亮的字体.正因为字体在网页设计中扮演着重要角色,设计师经常要花很多的时间去挑选字体.如果你正在寻找好看的免 ...
- 5个步骤,绘制高质量的业务流程图
01 绘制业务流程图存在的问题 产品经理在梳理业务时,经常会用到业务流程图.绘制业务流程图,是产品经理的基本功. 然而,由于缺乏正确的方法和足够的训练,不少产品经理绘制的业务流程图,存在一些问题.这些 ...
- pb 哪里找到系统图标_建议收藏的7个高质量图标网站,一网打尽图标素材
大家好,这里是@秋叶PPT 图标是 PPT 制作中经常用到的元素之一,其比文字生动,比图片简洁的特性,应用在 PPT 中可以极大地提高页面的可阅读性,从而深受广大 PPT 爱好者喜爱. 那应该到哪里可 ...
- 【建议收藏】6款高质量Windows软件,好用到无法拒绝
买了新电脑,当然要装软件啦!今天小葱给大家推荐6款超级好用的Windows神级软件,每一款都好用到无法拒绝! 1. 野葱 首先要介绍的肯定是我们野葱录屏啦,毕竟它无广告.无捆绑.无水印.还没有时间限制 ...
- 英文手绘字体_40种免费的高质量手绘字体
与衬线字体家族不同,这些手绘字体看起来不太严重,但是无论在何处使用它们,都倾向于给人以强烈的人文感. 手绘字体很难单独使用,但在以下情况下它们是最完美的: 如果您受到启发使您的新网页设计具有草图或手绘 ...
- 10 个案例分享几个 Python 可视化小技巧,助你绘制高质量图表
作者 | 俊欣 来源 | 关于数据分析与可视化 一般在Python当中,我们用于绘制图表的模块最基础的可能就是matplotlib了,今天小编分享几个用该模块进行可视化制作的技巧,帮助你绘制出更加高质 ...
最新文章
- 使用Chrome扩展金山词霸取词划意
- java初学者笔记总结day9
- 西安交通大学2019计算机复试方案,西安交通大学2019年招收硕士研究生复试体检通知...
- iOS - 使用 SQLite 数据库实现数据持久化
- java统计文本中英文单词个数split_零基础入门NLP - 新闻文本分类Task2(天池入门赛)...
- 协方差 之 随机变量间的协方差及向量之间的协方差之间的微妙的区别
- bootstrap4 左侧导航栏 优秀 大气_制作动态效果的后台导航栏——左侧导航
- 2阶节IIR算法C语言源码
- Kafka配置文件及解释
- 【恋上数据结构】排序算法前置知识及代码环境准备
- 程序员面试头条被拒,一年后逆袭拿到offer【巴分巴秒】
- 文本处理命令--uniq
- 小白白红队初成长(2)主动信息收集
- 85篇精彩的经典古文
- Mybatis-四大神兽
- 检测点云中的目标(ROS2 Tao-PointPillars)
- xbox one 手柄在ubuntu下的使用和开发
- (2)Django---用命令创建项目
- 第四章课后习题-用Python实现羊车门问题,最大公约数计算,猜字游戏,统计不同字符个数。
- 基于javaweb的旅游管理系统(java+jsp+html5+bootstrap+servlet+mysql)