积分系统——实现文字到图片的转化
来源:互联网 发布:数据分析师需要考证吗 编辑:程序博客网 时间:2024/06/08 03:05
小编最近在做的积分系统中,前后台用户登陆后需要有一个头像作为用户的代表,那么小编就开始想,如何让我们自动生成不同的用户不同的头像呢?
首先自然是想到了QQ,他带了很多的内置头像,可是不是那么的正规,那么一个企业用的应用头像应该是怎样的呢,然后就想到了今目标这个软件,这个软件会把每个人的名字中的一个字来作为这个人的默认头像,所以我也就开始了对于这个文字转化为图片的研究了。
一、文字转图片实现
从网上查了一查,基本上说的都是文字转换为bitmap的位图比较方便,所以就用文字转位图的方式吧。接下来就是在网上各种找资料,网上说的都大同小异,在这里简单说一下:
首先是需要获得需要转换的字符,这个好说,目前的项目中从session中获取就好。
然后就是截取名字,这个通过比较发现图片中一个字做头像为宜,并且用最后一个字也不怕重复,所以果断的就决定了。
然后就是对于图片截取的一个应用,这里是用一个C/S的小程序来做的例子,窗体如下:
其中比较核心的代码如下:
#region 把文字转换成Bitmap /// <summary> /// 把文字转换成Bitmap /// </summary> /// <param name="text"></param> /// <param name="font"></param> /// <param name="rect">用于输出的矩形,文字在这个矩形内显示,为空时自动计算</param> /// <param name="fontcolor">字体颜色</param> /// <param name="backColor">背景颜色</param> /// <returns></returns> private Bitmap TextToBitmap(string text, Font font, Rectangle rect, Color fontcolor, Color backColor) { Graphics g; Bitmap bmp; StringFormat format = new StringFormat(StringFormatFlags.NoClip); if (rect == Rectangle.Empty) { bmp = new Bitmap(1, 1,PixelFormat.Format32bppRgb); bmp.SetResolution(300.0F, 300.0F); //改变像素密度 g = Graphics.FromImage(bmp); //计算绘制文字所需的区域大小(根据宽度计算长度),重新创建矩形区域绘图 SizeF sizef = g.MeasureString(text, font, PointF.Empty, format); int width = (int)(sizef.Width + 1); int height = (int)(sizef.Height + 1); rect = new Rectangle(0, 0, width, height); bmp.Dispose(); bmp = new Bitmap(width, height, PixelFormat.Format32bppRgb); bmp.SetResolution(300.0F, 300.0F);//改变像素密度 } else { bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppRgb); bmp.SetResolution(300.0F, 300.0F); //改变像素密度 } g = Graphics.FromImage(bmp); //使用ClearType字体功能 g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; g.FillRectangle(new SolidBrush(backColor), rect); g.DrawString(text, font, Brushes.White, rect, format); return bmp; } #endregion
需要注意的是,如果想要用这个代码,命名空间需要引用System.Drawing; 和System.Drawing.Imaging; 只有这样才能运行相应的图像类型。
特别强调的是,这个里面的函数和转换之后的图片大小都是随着文字的字体决定的,所以有一定的限制,并且在没有特别限制像素密度的时候,像素密度总是为97,所以我自己添加了一些改变像素密度的代码,可以让图片更加细腻。(注释中有)
这个demo的连接奉上,欢迎大家学习讨论。http://download.csdn.net/detail/tr1912/9829743
二、如何套在网页上
我们都知道,在网页上,图片是要放在<img/>这个标签中的,所以为了让名字不同的时候出现不同的头像,就需要吧这个显示图片的方法写活,经过多方查找,终于找到了一个比较好的方法,就是在窗体加载时候通过MVC的自带@来获得session中的姓名,然后再用JS来给img标签附上图片,方法如下:
HTML如下:
<a data-toggle="dropdown" class="dropdown-toggle" href="#"> <img id="headPic" alt="" class="admin-pic img-circle" src="/">Hi, @Session["userName"] <div id="UserName" hidden="hidden">@Session["userName"]</div></a>
页面加载的时候js如下:
$.parser.onComplete = function () { var img = document.getElementById('headPic'); var userName = document.getElementById('UserName'); img.src = "/content/IMG/" + userName.innerHTML + ".jpg";}
其中,这段JS需要放在body的最下面的地方才可以,因为需要在加载页面完成之后才可以显示图片所以需要注意着一点,并且上面这个js的函数是easyUI的页面数据加载完成之后的函数,大家可以借鉴一下。
- 积分系统——实现文字到图片的转化
- 如何实现图片转化为文字
- 使用StaticLayout实现文字转化为图片的效果(类似发送长微博)
- 移动端图像到文字的转化识别技术
- 将FORM转化成一个图片,并转存到系统中的某个页面下面,并实现打印方法
- 利用PHP实现文字绘制到新的图片上的功能
- 实现一边录音一边转化为文字的功能
- 文字+图片无缝滚动 兼容ie 360 火狐 谷歌 [花20积分买的]
- python 实践程序1——实现binaryproto文件到npy文件的转化
- Android系统自带分享功能的实现(可同时分享文字和图片)
- Android系统自带分享功能的实现(可同时分享文字和图片)
- Android 调用系统的分享[完美实现同时分享图片和文字]
- Android系统自带分享功能的实现(可同时分享文字和图片)
- Android系统自带分享功能的实现(可同时分享文字和图片)
- 域名转化到IP地址的实现
- 保存图片到本地,查看本地图片,递归实现scrollView的无限循环滚动,文字横向渐变效果,autoLayout
- Android把文字写到图片上生成图片+文字的新图片
- CSDN的积分系统
- 硅谷教父:为什么总是“边缘人”在改变世界?
- 《C语言及程序设计》实践项目——动态数组 ->【项目1-学生人数没个准】
- 原串反转
- Activity与Fragment
- Jquery常用工具集
- 积分系统——实现文字到图片的转化
- “-bash: !”: event not found"、echo > sudo permission denied
- 【C++】尽可能使用const
- 山东省第六届ACM竞赛 山东理工SDUT3258 Square Number
- ios iOS中改变部分字体颜色
- linux(kali,centos)安装vm及其提示缺少c头文件解决方法
- SpringBoot非官方教程 | 第二十二篇: 创建含有多module的springboot工程
- 算法导论 练习题 11.1-4
- 2016年全球50个创新趋势