C#把文字放到图片上
Posted 李公子lm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#把文字放到图片上相关的知识,希望对你有一定的参考价值。
做小程序时遇到一个问题,用户在分享内容的时候,我需要生成一张带有内容的图片,那么如何把文字放到图片上,并生成一张新的图片呢?
先看效果图。
这是背景图
接下来上代码。
/// <summary>
/// 字符串放到图片上
/// </summary>
/// <param name="text"></param>
public static string AddStringToImg(string text)
{
int phWidth = 470;
var basePath = Directory.GetCurrentDirectory();
Console.WriteLine("获取根目录:" + basePath);
TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
//用时间戳当做当前生成的文件名
var timeStamp = Convert.ToInt64(ts.TotalSeconds).ToString();
var savePath = string.Format("{0}/ShareImages/{1}.jpg", basePath, timeStamp);
Console.WriteLine("保存图片名称地址:" + savePath);
var tarFile = basePath+ "/ShareImages/bg.jpg";
//读取一个bmp图片
Image newImage = new Bitmap(tarFile);
//新建一个画板
Graphics g = Graphics.FromImage(newImage);
//设置质量
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//画图
g.DrawImage(newImage, 0, 0);
#region 自定义字体
//路径
var strFontPath = basePath + "/simkai.ttf";
//读取字体文件
PrivateFontCollection pfc = new PrivateFontCollection();
pfc.AddFontFile(strFontPath);
//实例化字体
float fontSize = 20;
Font font = new Font(pfc.Families[0], fontSize);
#endregion
// 自定义行间距
SizeF fit = new SizeF(phWidth, font.Height+5);
StringFormat fmt = StringFormat.GenericTypographic;
int spacing = (int)(font.Height);
//自定义字体颜色
Brush brush = new SolidBrush(Color.FromArgb(65, 65, 65));
int line = 5;
//限制内容长度,超过的文字用...代替
if (text.Length > 140)
{
text = text.Substring(0, 140) + "...";
}
for (int ix = 0; ix < text.Length;)
{
int chars, lines;
g.MeasureString(text.Substring(ix), font, fit, fmt, out chars, out lines);
g.DrawString(text.Substring(ix, chars), font, brush, 10, spacing * line);
++line;
ix += chars;
}
//保存图
newImage.Save(savePath, ImageFormat.Jpeg);
//释放资源
g.Dispose();
newImage.Dispose();
return timeStamp;
}
最后简单说两句,这里主要是用到C#的Image
类和Brush
类,注意调整好文字的位置和行间距即可,最后保存新图片,并释放资源即可。
以上是关于C#把文字放到图片上的主要内容,如果未能解决你的问题,请参考以下文章