asp.net将文字绘制成图片

该博客介绍如何在ASP.NET中将文字转换为位图图像,并在网页上展示。此功能支持文本自动换行,调用代码简单,适用于将特定字符串转化为图形显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


调用代码:其中,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();
                }
绘制和分行函数:

/// <summary>
        /// 绘制文本自动换行(超出截断)
        /// </summary>
        /// <param name=\"graphic\">绘图图面</param>
        /// <param name=\"font\">字体</param>
        /// <param name=\"text\">文本</param>
        /// <param name=\"recangle\">绘制范围</param>
        private void DrawStringWrap(Graphics graphic, Font font, string text, Rectangle recangle)
        {
            List<string> 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);
            }

        }

        /// <summary>
        /// 将文本分行
        /// </summary>
        /// <param name=\"graphic\">绘图图面</param>
        /// <param name=\"font\">字体</param>
        /// <param name=\"text\">文本</param>
        /// <param name=\"width\">行宽</param>
        /// <returns></returns>
        private List<string> GetStringRows(Graphics graphic, Font font, string text, int width)
        {
            int RowBeginIndex = 0;
            int rowEndIndex = 0;
            int textLength = text.Length;
            List<string> textRows = new List<string>();

            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/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值