C#自动生成漂亮的水晶效果头像的实现代码

 这篇文章主要介绍了C#自动生成漂亮的水晶效果头像的实现代码,有需要的朋友可以参考一下

与其他的微博系统相同,在“多可内网微博系统”的用户也可上传自己的头像,并支持头像裁剪。
 
但“多可内网微博系统”的头像可以更漂亮,因为系统实现了水晶效果的头像。
C#程序实现水晶效果头像的过程是:
 
(1)图像缩略到宽度或高度=90的头像;
 
(2)由用户选择合适的位置裁剪90x90的最终头像;
 
(3)添加水晶效果;
 
代码奉献:
 
代码如下:
/// <summary>
/// 绘制水晶效果的头像
/// </summary>
/// <param name="containsPage"></param>
/// <param name="w"></param>
/// <param name="h"></param>
/// <param name="MemoString"></param>
public static void Avatar(Page containsPage, string filename, int r, int m, int s, int x, int y, bool save, string new_avatar)
{
System.Drawing.Image imageSrc = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath("/") + filename);
int w = imageSrc.Width;
int h = imageSrc.Height;
 
if (r == 1 || r == 3)
{
h = imageSrc.Width;
w = imageSrc.Height;
}
 
if (save)
{
w = h = 90;
}
 
if (w > 300) w = 300;
if (h > 300) h = 300;
 
Color backColor = Color.DarkTurquoise;
Size size = new Size(w, h);
 
System.Drawing.Bitmap btnbmp = new Bitmap(w, h);
Graphics g = Graphics.FromImage(btnbmp);
 
//重置背景颜色,可以自定义
g.Clear(Color.White);
 
Color clr = backColor;
 
g.SmoothingMode = SmoothingMode.AntiAlias;//消除锯齿
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
 
// 创建按钮图形-刷子
int btnOff = 0;//按钮边距
Rectangle rc1 = new Rectangle(btnOff, btnOff, size.Width - 1 - btnOff, size.Height - 1 - btnOff);
GraphicsPath gpath1 = GetGraphicsPath(rc1, 10);
GraphicsPath gpath1a = GetGraphicsPath(rc1, 15);
LinearGradientBrush br1 = new LinearGradientBrush(new Point(0, 0), new Point(0, rc1.Height + 6), clr, Color.White);
 
// 创建按钮阴影-刷子
int shadowOff = 1;//阴影边距
Rectangle rc2 = rc1;
rc2.Offset(0, shadowOff);
GraphicsPath gpath2 = GetGraphicsPath(rc2, 10);
PathGradientBrush br2 = new PathGradientBrush(gpath2);
br2.CenterColor = Color.FromArgb(0, 0, 0); // Color.Black;
br2.SurroundColors = new Color[] { Color.FromArgb(64, 64, 64, 64), Color.FromArgb(64, 128, 128, 128) }; // SystemColors.ButtonFace
 
// 为了更逼真,我们将渐变结束颜色设定为窗体前景色,可以根据窗口的前景颜色适当调整
// 创建按钮顶部白色渐变-刷子
Rectangle rc3 = rc1;
rc3.Inflate(-1, -1);
rc3.Height = 15;
GraphicsPath gpath3 = GetGraphicsPath(rc3, 10);
LinearGradientBrush br3 = new LinearGradientBrush(rc3, Color.FromArgb(255, Color.White), Color.FromArgb(0, Color.White), LinearGradientMode.Vertical);
 
//绘制图形
//绘制阴影
if (s > 0)
{
g.FillPath(br2, gpath2);
}
 
//绘制按钮
if (s > 0)
{
g.FillPath(br1, gpath1);
}
 
//if (s > 0)
//{
g.SetClip(gpath1a, CombineMode.Replace);
//}
 
switch (m)
{
case 1:
_currentBitmap = (Bitmap)imageSrc;
RotateFlip(RotateFlipType.RotateNoneFlipX);
imageSrc = (System.Drawing.Image)_currentBitmap;
break;
case 2:
_currentBitmap = (Bitmap)imageSrc;
RotateFlip(RotateFlipType.RotateNoneFlipY);
imageSrc = (System.Drawing.Image)_currentBitmap;
break;
default:
break;
}
 
switch (r)
{
case 1:
_currentBitmap = (Bitmap)imageSrc;
RotateFlip(RotateFlipType.Rotate90FlipNone);
imageSrc = (System.Drawing.Image)_currentBitmap;
break;
case 2:
_currentBitmap = (Bitmap)imageSrc;
RotateFlip(RotateFlipType.Rotate180FlipNone);
imageSrc = (System.Drawing.Image)_currentBitmap;
break;
case 3:
_currentBitmap = (Bitmap)imageSrc;
RotateFlip(RotateFlipType.Rotate270FlipNone);
imageSrc = (System.Drawing.Image)_currentBitmap;
break;
default:
break;
}
 
g.DrawImage(imageSrc, -x, -y);
 
//绘制顶部白色泡泡
if (s > 0)
{
g.FillPath(br3, gpath3);
}
 
imageSrc.Dispose();
g.Dispose();
 
MemoryStream stream = new MemoryStream();
btnbmp.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
 
if (save)
{
try
{
//将此 原图片 以指定格式并用指定的编解码参数保存到指定文件 
string sFile = HttpContext.Current.Server.MapPath("/") + new_avatar;
btnbmp.Save(sFile);
}
catch (System.Exception e)
{
throw e;
}
}
 
//输出图片containsPage 
containsPage.Response.Expires = 0;
containsPage.Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);
containsPage.Response.AddHeader("pragma", "no-cache");
containsPage.Response.AddHeader("cache-control", "private");
containsPage.Response.CacheControl = "no-cache";
containsPage.Response.Clear();
containsPage.Response.ContentType = "image/png";
containsPage.Response.BinaryWrite(stream.ToArray());
 
}
 
 

时间: 2024-09-20 05:40:10

C#自动生成漂亮的水晶效果头像的实现代码的相关文章

android-Android编程自动生成的r.java文件,里面的代码特别多

问题描述 Android编程自动生成的r.java文件,里面的代码特别多 和视频教程里面看到的都不一样.我用的Android6.0SDK.刚接触Android,什么都不懂,求助各位.谢谢 解决方案 Android R.java文件没有生成android R.java资源文件不自动生成的原因Android: 如何手工生成R.java文件? 解决方案二: 由系统管理的,不用动它. 解决方案三: 这个文件不用动,里边放的是宏以及函数地址. 解决方案四: 系统自动创建的R.java,这个文件相当于资源字

用jfreechart绘制水晶效果的拼图实现代码

一个水晶效果的拼图如下 实现代码如下  代码如下 复制代码 <%@ page contentType="text/html;charset=GBK"%>    <%@ page      import="org.jfree.chart.*,org.jfree.chart.servlet.ServletUtilities,      org.jfree.util.Rotation,org.jfree.data.general.DefaultPieDataset

Hibernate利用XDoclet自动生成配置文件

many-to-many为例,有Position和User两张表,一个Position可以有多个Users,一个User也可以有多个 Position,中间的关联表为 test_user_position .通过在PO中加入XDoclet,自动生成hbm配置文件.不废话,看代码. package test; import java.util.Set; import java.util.TreeSet; /** *//** * @hibernate.class table="test_positi

jsp上传文件之后,针对上传文件自动生成超链接供下载,具体代码。谢谢。

问题描述 jsp上传文件之后,针对上传文件自动生成超链接供下载,具体代码.谢谢. jsp上传文件之后,针对上传文件自动生成超链接供下载,整个过程的具体代码.谢谢. 解决方案 这个代码很长,你自己做到哪一步了.上传文件后会返回一个地址,使用servlet访问路径和那个地址拼接出url放在a标签的href就行了 解决方案二: http://www.cnblogs.com/xdp-gacl/p/4200090.html 解决方案三: JSP上传文件代码

android-Android自动生成的GridViw,出来的效果里item是垂直的,是不是少了哪个属性。

问题描述 Android自动生成的GridViw,出来的效果里item是垂直的,是不是少了哪个属性. ,或许是不是少了android:stretchMode=""columnWidth"",可是我的GridView是在代码里自动生成的,这个属性在代码要的是int,不知道怎么设置.谢谢大牛们了,新手自学路,苦逼白痴问题多! 解决方案 设置每行显示的个数 gridView.setNumColumns(5); 解决方案二: gridView.setNumColumns()

AI 自动生成二次元妹子?或将替代插画师部分工作

雷锋网AI科技评论按:最近二次元爱好者们可能会感觉到了一阵兴奋流遍全身.来自复旦大学.同济大学.卡内基梅隆大学和石溪大学共6位学生(其实本科都在复旦)搭建了一个利用人工智能自动生成精美动漫角色的网站MakeGirls.moe. 对于用户来说操作非常简单,只需要选择自己喜爱的头发.眼睛.微笑.张嘴等等特征,然后点击"genrate"就可以通过训练出的AI模型来生成一个动漫人物.该网站上线后数天,访问量便增加到10k+每小时.其repo在github trending上也一度排到第四位.该

Photoshop文字教程:半透明漂亮装饰水晶字

水晶字的制作可能并不复杂.不过要做出好看的水晶字还是要花费一定心思的,首先要从文字的造型上下功夫,把普通的文字艺术化,增加一些漂亮的花纹装饰等.然后就是水晶效果的制作,尽量把文字渲染的剔透一点.最后就是装饰元素的添加,可以根据需要增加一些自己喜欢的装饰元素. 最终效果 1.新建一个大小自定的文档,选择渐变工具拉出一个蓝色至深蓝色的径向渐变,效果如下图. [1] [2] [3] [4] [5] [6]  下一页

IE8 input输入框type=“password”自动生成input框的疑问

问题描述 IE8 input输入框type="password"自动生成input框的疑问 近期在做前端工作,调试的时候发现了个很奇葩的现象,当我的input输入框的type 类型为password的时候,IE8会在该元素后面重新生成个input框,并把代码中的input框给设为"display:none:",导致文本框使用不了,哪位大神知道怎么解决这个问题吗?求指点,图片随后附上~ 解决方案 placehoder.js这个组件生产的,ie8-不支持placehol

前端的小玩意(9.4)——做一个仿360工具箱的web页面(自动生成所有图标,对图标添加响应逻辑)

DEMO网址: http://jianwangsan.cn/toolbox (四)制作JSON,自动将图标填充进所有工具 首先是JSON,因为工具很多,所以JSON内容很长. 具体而言,JSON是一个数组中的对象(只有这一个对象),他有两个属性:BigImg和CommonImg. 这两个属性都是数组类型: BigImg里面,他用于存放最上面的三个大图标: CommonImg里面,存放其他工具图标. BigImg单个数组元素的结构如下: [javascript] view plain copy