请教一个C#中将文字以图片形式输出的问题

流年岁月 2010-12-30 11:16:44
/// <summary>
///
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public byte[] CreateImg(string text)
{
int width = Convert.ToInt32(text.Length * 10);
Bitmap img = new Bitmap(width, 20);
Graphics gfc = Graphics.FromImage(img);
gfc.Clear(Color.White);
Font font = new Font("arial", 10, FontStyle.Bold);
System.Drawing.Drawing2D.LinearGradientBrush brush =
new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.DarkOrchid, Color.Red, 1.5f, true);
gfc.DrawString(text, font, brush, 3, 2);
gfc.DrawRectangle(new Pen(Color.DarkBlue), 0, 0, img.Width - 1, img.Height - 1);
//将图像添加到页面
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
byte[] _a = ms.ToArray();
img.Dispose();
ms.Dispose();
return _a;
}

这里有这样一个方法,返回的是byte[],现在我想讲一段文字内容转换成图片形式,赋值到页面控件上!请大家帮我看看,谢谢!
...全文
470 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
流年岁月 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 fangxinggood 的回复:]

所以如果采用路径的方式,因为并发请求或者多个页面使用而内容不同就必须需要考虑需要避免文件名重复的问题,但如果是直接输出流的话就不用考虑,那样就看不到固定的gif文件地址而已。二者取一吧。
[/Quote]

按照你的思路 我已经找到合适自己的解决办法了,深表谢意!
vbvc520 2011-01-02
  • 打赏
  • 举报
回复
深夜路过,帮顶!!顺便学习下6
ggw128 2011-01-02
  • 打赏
  • 举报
回复
建议使用直接输出流的方式挺好的。这个应用最多的就是登录时验证代码的地方。
yangbo4235 2011-01-02
  • 打赏
  • 举报
回复
学到一手,谢谢楼主
itanders 2011-01-01
  • 打赏
  • 举报
回复
图像输出?
机器人 2011-01-01
  • 打赏
  • 举报
回复
所以如果采用路径的方式,因为并发请求或者多个页面使用而内容不同就必须需要考虑需要避免文件名重复的问题,但如果是直接输出流的话就不用考虑,那样就看不到固定的gif文件地址而已。二者取一吧。
wangyu32 2010-12-31
  • 打赏
  • 举报
回复
图片输出是二进制
流年岁月 2010-12-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huangwenquan123 的回复:]

引用 5 楼 wangbenyan 的回复:
引用 3 楼 fangxinggood 的回复:

简单的 img.Save 改为输出到文件

C# code
public static void CreateImg(string text, string filePath)
{
int width = Convert.ToInt32(text.Length * 10);
Bit……
[/Quote]

那如果我有2个地方要显示图片的话,第一次调用这个方法将第一个地方的内容显示在图片上了,如果第二个地方再调用这个方式将第二个地方的内容也显示在图片上,那最终显示在页面上2个地方 的都将会是第二章图片的内容了!我测试过,代码大概是这样的:
/// <summary>
/// 将文字转化为图片方法
/// </summary>
/// <param name="text">输入字符串</param>
/// <returns></returns>
public void CreateImgs(string text)
{
int width = Convert.ToInt32(text.Length * 20);
Bitmap img = new Bitmap(width, 20);
Graphics gfc = Graphics.FromImage(img);
gfc.Clear(Color.White);
Font font = new Font("arial", 10, FontStyle.Bold);
System.Drawing.Drawing2D.LinearGradientBrush brush =
new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.Gray, Color.Gray, 1.5f, true);
gfc.DrawString(text, font, brush, 3, 2);
gfc.DrawRectangle(new Pen(Color.White), 0, 0, img.Width, img.Height);
//将图像添加到页面

string ImgPath = "/img/ico/ConvertTexr.gif";
if (!Directory.Exists(ImgPath))
Directory.CreateDirectory(ImgPath);
img.Save(System.Web.HttpContext.Current.Server.MapPath(ImgPath), System.Drawing.Imaging.ImageFormat.Gif);

img.Dispose();
gfc.Dispose();
}
  • 打赏
  • 举报
回复
机器人 2010-12-30
  • 打赏
  • 举报
回复
简单的 img.Save 改为输出到文件

public static void CreateImg(string text, string filePath)
{
int width = Convert.ToInt32(text.Length * 10);
Bitmap img = new Bitmap(width, 20);
Graphics gfc = Graphics.FromImage(img);
gfc.Clear(Color.White);
Font font = new Font("arial", 10, FontStyle.Bold);
LinearGradientBrush brush = new LinearGradientBrush(
new Rectangle(0, 0, img.Width, img.Height),
Color.DarkOrchid, Color.Red, 1.5f, true);
gfc.DrawString(text, font, brush, 3, 2);
gfc.DrawRectangle(new Pen(Color.DarkBlue), 0, 0, img.Width - 1, img.Height - 1);
img.Save(filePath);
//将图像添加到页面
//MemoryStream ms = new MemoryStream();
//img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
//byte[] _a = ms.ToArray();
img.Dispose();
//ms.Dispose();
//return _a;
}


使用:
var imagePath = @"~/Images/test.png";
Utils.CreateImg("Hello Tester", Server.MapPath(imagePath));
this.Image1.ImageUrl = imagePath;


不想生成那么多图片的话,就把这个方法挪到一个aspx页面里,
通过QueryString传递Text,该页面直接把Byte[]写回Response。
流年岁月 2010-12-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rock870210 的回复:]

MemoryStream memStream = new MemoryStream(CreateImg("文字"));
Bitmap image = new Bitmap(memStream);
PictureBox对象.Image=image;
[/Quote]

请问是否可以 返回字符串形式 就像这样:”文字转为图片结果为:“+CreateImg("文字");类似这样的,不知道是否可以处理呢?
Rock870210 2010-12-30
  • 打赏
  • 举报
回复
MemoryStream memStream = new MemoryStream(CreateImg("文字"));
Bitmap image = new Bitmap(memStream);
PictureBox对象.Image=image;
huangwenquan123 2010-12-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangbenyan 的回复:]
引用 3 楼 fangxinggood 的回复:

简单的 img.Save 改为输出到文件

C# code
public static void CreateImg(string text, string filePath)
{
int width = Convert.ToInt32(text.Length * 10);
Bitmap img = new Bitmap(widt……
[/Quote]你可以把要显示在图片的文字传过来,路径固定,每次用这个页面的时候就生成一张图片,如果原来图片存在直接覆盖掉
  • 打赏
  • 举报
回复
流年岁月 2010-12-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fangxinggood 的回复:]

简单的 img.Save 改为输出到文件

C# code
public static void CreateImg(string text, string filePath)
{
int width = Convert.ToInt32(text.Length * 10);
Bitmap img = new Bitmap(width, 20);
Graphics g……
[/Quote]

谢谢你的方法,我还有一点疑问,我刚按照你的方法试过,如果我不想生成太多的图片的话,能否也像你的说的单独建立一个页面,然后其他地方需要得到图片的就传text到这个页面来,这种办法是返回的byte字节数组,这时候页面上就会显示类似这种 <img src=\"/Ajax/ConvertText.aspx?ReqStr=要转化的字符\" border=\"0\"> 而我现在却还是想这里src直接就是返回的src='*****.gif' 这种明显的图片格式,求教了!
huangwenquan123 2010-12-30
  • 打赏
  • 举报
回复
            string path = "1.jpg";
string text = "天天开心!";
string addtext = "文字转为图片结果为:";
Bitmap bitmap = new Bitmap(500, 100);
Graphics g = Graphics.FromImage(bitmap);
Font f = new Font("宋体", 14);
SizeF size = g.MeasureString(addtext + text, f);
SolidBrush brush = new SolidBrush(Color.White);
g.Clear(Color.Black);
g.DrawString(addtext + text, f, brush, bitmap.Width - size.Width, bitmap.Height - size.Height);
bitmap.Save(Server.MapPath(path));
Image1.ImageUrl = path;

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧