asp.net将文字绘制成图片
发布日期:2021-10-12 02:13:36 浏览次数:1 分类:技术文章

本文共 3567 字,大约阅读时间需要 11 分钟。

可以将字符串输出为位图,并在前台页面显示。同时支持自动换行。

调用代码:其中,str为要输出的文本。

Bitmap newBitmap = null;                Graphics g = null;                string str = allTextTrans;                try                {                    Font strFont = new Font("宋体", 12);                    newBitmap = new Bitmap(800, 1000, PixelFormat.Format32bppArgb);                    g = Graphics.FromImage(newBitmap);                    Rectangle recangle = new Rectangle(0, 0, 800, 1000);                    DrawStringWrap(g, strFont, allTextTrans, recangle);                    MemoryStream tempStream = new MemoryStream();                    newBitmap.Save(tempStream, ImageFormat.Png);                    Response.ClearContent();                    Response.ContentType = "image/png";                    Response.BinaryWrite(tempStream.ToArray());                    Response.End();                }                finally                {                    if (g != null) g.Dispose();                    if (newBitmap != null) newBitmap.Dispose();                }
绘制和分行函数:

///         /// 绘制文本自动换行(超出截断)        ///         /// 绘图图面        /// 字体        /// 文本        /// 绘制范围        private void DrawStringWrap(Graphics graphic, Font font, string text, Rectangle recangle)        {            List
textRows = GetStringRows(graphic, font, text, recangle.Width); int rowHeight = (int)(Math.Ceiling(graphic.MeasureString("测试", font).Height)); int maxRowCount = recangle.Height / rowHeight; int drawRowCount = (maxRowCount < textRows.Count) ? maxRowCount : textRows.Count; //int top = (recangle.Height - rowHeight * drawRowCount) / 2; int top = 0; StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Center; for (int i = 0; i < drawRowCount; i++) { Rectangle fontRectanle = new Rectangle(recangle.Left, top + rowHeight * i, recangle.Width, rowHeight); graphic.DrawString(textRows[i], font, new SolidBrush(Color.Black), fontRectanle, sf); } } ///
/// 将文本分行 /// ///
绘图图面 ///
字体 ///
文本 ///
行宽 ///
private List
GetStringRows(Graphics graphic, Font font, string text, int width) { int RowBeginIndex = 0; int rowEndIndex = 0; int textLength = text.Length; List
textRows = new List
(); for (int index = 0; index < textLength; index++) { rowEndIndex = index; if (index == textLength - 1) { textRows.Add(text.Substring(RowBeginIndex)); } else if (rowEndIndex + 1 < text.Length && text.Substring(rowEndIndex,1) == "\n") { textRows.Add(text.Substring(RowBeginIndex, rowEndIndex - RowBeginIndex)); rowEndIndex = index += 1; RowBeginIndex = rowEndIndex; } else if (graphic.MeasureString(text.Substring(RowBeginIndex, rowEndIndex - RowBeginIndex + 1), font).Width > width) { textRows.Add(text.Substring(RowBeginIndex, rowEndIndex - RowBeginIndex)); RowBeginIndex = rowEndIndex; } } return textRows; } }
展示效果:

参考资料:http://blog.163.com/gsrwsh@126/blog/static/75794506201061492755492/

转载地址:https://blog.csdn.net/qq_36747842/article/details/78133023 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:ASP.NET中ListView的插入、删除、编辑、读取
下一篇:如何把footer固定到页面最下端?

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月18日 07时33分24秒