我使用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);
}
答案 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;