将文本转换为图像

时间:2014-02-10 10:47:17

标签: c# asp.net

我使用C#获得了将文本转换为图像的代码。代码如下。 现在我的问题是这个函数返回一个位图图像。如何在我的asp.net页面中显示它。我想显示这个函数返回的图像。

private Bitmap CreateBitmapImage(string sImageText)
{
    Bitmap objBmpImage = new Bitmap(1, 1);

    int intWidth = 0;
    int intHeight = 0;

    // Create the Font object for the image text drawing.
    Font objFont = new Font("Arial", 20, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Pixel);

    // Create a graphics object to measure the text's width and height.
    Graphics objGraphics = Graphics.FromImage(objBmpImage);

    // This is where the bitmap size is determined.
    intWidth = (int)objGraphics.MeasureString(sImageText, objFont).Width;
    intHeight = (int)objGraphics.MeasureString(sImageText, objFont).Height;

    // Create the bmpImage again with the correct size for the text and font.
    objBmpImage = new Bitmap(objBmpImage, new Size(intWidth, intHeight));

    // Add the colors to the new bitmap.
    objGraphics = Graphics.FromImage(objBmpImage);

    // Set Background color
    objGraphics.Clear(Color.White);
    objGraphics.SmoothingMode = SmoothingMode.AntiAlias;
    objGraphics.TextRenderingHint = TextRenderingHint.AntiAlias;
    objGraphics.DrawString(sImageText, objFont, new SolidBrush(Color.FromArgb(102, 102, 102)), 0, 0);
    objGraphics.Flush();
    return (objBmpImage);
}  

4 个答案:

答案 0 :(得分:2)

有一个例子,其中包含以下功能

public Bitmap ConvertTextToImage(string txt, string fontname, int fontsize, Color bgcolor, Color fcolor, int width, int Height)
    {
        Bitmap bmp = new Bitmap(width, Height);
        using (Graphics graphics = Graphics.FromImage(bmp))
        {

            Font font = new Font(fontname, fontsize);
            graphics.FillRectangle(new SolidBrush(bgcolor), 0, 0, bmp.Width, bmp.Height);
            graphics.DrawString(txt, font, new SolidBrush(fcolor), 0, 0);
            graphics.Flush();
            font.Dispose();
            graphics.Dispose();


        }
        return bmp;
    }

并使用此功能:

ConvertTextToImage(txtvalue.Text, "Bookman Old Style", 10, Color.Yellow, Color.Red, txtvalue.Width, txtvalue.Height);

答案 1 :(得分:2)

创建HttpHandler(例如image.ashx)并使用类似代码的内容:

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "image/png";
        var image = CreateBitmapImage("Hello world");
        var ms = new MemoryStream();
        image.Save(ms, ImageFormat.Png);

        context.Response.BinaryWrite(ms.ToArray());
    }

您需要在哪里添加图片链接。

<img src="image.ashx" alt="image" />

更新[根据评论]:

Http处理程序:

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "image/png";

        var text = context.Request.Params["text"];
        if (text == null) text = string.Empty;
        var image = CreateBitmapImage(text);

        image.Save(context.Response.OutputStream, ImageFormat.Png);
    }

页面布局: -

    <asp:TextBox runat="server" ID="MyTextBox"></asp:TextBox>
    <asp:Button runat="server" OnClick="RenderImageButtonClicked" Text="Change text"/>
    <asp:Image runat="server" ID="MyTextImage" />

页面活动: -

    protected void RenderImageButtonClicked(object sender, EventArgs e)
    {
        MyTextImage.ImageUrl = "CreateImageText.ashx?text=" + HttpContext.Current.Server.UrlEncode(MyTextBox.Text);
    }

答案 2 :(得分:0)

要在页面上显示图片,您需要在HTML中创建IMG标记。您可以手动执行此操作或使用ASP.NET的图像控件。 IMG标记包含src-attribute中图像的地址。这可能是静态文件引用,或者 - 在您的情况下 - 对动态创建的图像的引用。当浏览器显示HTML文件时,它会查找IMG标记并检索src-attribute中引用的内容。
显示动态创建的图像的简单方法是创建一个特殊页面,将图像流式传输到客户端。在页面上(例如在Page_Load中),您可以使用位图的Save - 方法将其写入响应流:

var bm = CreateBitmapImage("MyText");
bm.Save(Response.OutputStream, ImageFormat.Jpeg);
Response.ContentType = "image/jpeg";
Response.Flush();
Response.End();

当我从评论中读到时,CreateBitmapImage方法位于代码隐藏页面中 - 可能是您要在其上显示图像的页面。为了在动态创建图像时调用该方法,请将代码移动到新页面(无论如何都不需要它在其他页面上)。

IMG标记中,链接到新创建的页面,以便浏览器请求图像。如果您需要一些数据来创建图像,则需要将这些数据作为查询参数提供给图像页面,以便在您的情况下IMG标记可能如下所示:

<img src="dynamicimage.aspx?text=Mytext" />

请注意,使用@Anton描述的处理程序是一种更优雅的方法。但主要的构建块是相同的。

答案 3 :(得分:0)

string text = txtText.Text.Trim();
Bitmap bitmap = new Bitmap(1, 1);
Font font = new Font("Arial", 25, FontStyle.Regular, GraphicsUnit.Pixel);
Graphics graphics = Graphics.FromImage(bitmap);
int width = (int)graphics.MeasureString(text, font).Width;
int height = (int)graphics.MeasureString(text, font).Height;
bitmap = new Bitmap(bitmap, new Size(width, height));
graphics = Graphics.FromImage(bitmap);
graphics.Clear(Color.White);
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
graphics.DrawString(text, font, new SolidBrush(Color.FromArgb(255, 0, 0)), 0, 0);
graphics.Flush();
graphics.Dispose();
string fileName = Path.GetFileNameWithoutExtension(Path.GetRandomFileName()) + ".jpg";
bitmap.Save(Server.MapPath("~/images/") + fileName, ImageFormat.Jpeg);
imgText.ImageUrl = "~/images/" + fileName;
imgText.Visible = true;