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#把文字放到图片上的主要内容,如果未能解决你的问题,请参考以下文章

C#网络爬虫--多线程处理强化版

C# 如何把图片放到sql server数据库中

给图片加文字的方法

Delphi 模拟网站验证码(酷,把随机文字写道图片上)

文字如何生成二维码?

Java课程设计:捕获图片以及识别图中的文字