【问题标题】:Adding text to a JPG image in ASP.net C# and save to file on server在 ASP.net C# 中将文本添加到 JPG 图像并保存到服务器上的文件
【发布时间】:2012-05-24 00:50:00
【问题描述】:

我正在使用以下代码(归功于 Dolph Larson)在 ASP.net 服务器上获取位图格式的预制图像文件,在其上绘制一个字符串并将其保存到服务器上的文件中。在原始代码中,他将位图转储到 OutputStream,但我想将其转储到文件中。

下面的代码版本成功创建了新文件,但是当我打开它时,字符串并没有出现在新文件中的图像上绘制。我想我错过了一步 - 当我使用 bitMapImage.Save("bitmaptest.jpg", ImageFormat.Jpeg) 时,我只是重新保存原始版本而不是修改后的版本吗?

代码如下:

        //Load the Image to be written on.
        Bitmap bitMapImage = new
        System.Drawing.Bitmap(Server.MapPath("generic.jpg"));
        Graphics graphicImage = Graphics.FromImage(bitMapImage);
        graphicImage.SmoothingMode = SmoothingMode.AntiAlias;
        graphicImage.DrawString("testing 1 2 3",
        new Font("Arial", 20, FontStyle.Bold),
        SystemBrushes.WindowText, new Point(0, 0));
        Response.ContentType = "image/jpeg";
        bitMapImage.Save("bitmaptest.jpg", ImageFormat.Jpeg);
        graphicImage.Dispose();
        bitMapImage.Dispose();

提前致谢!

【问题讨论】:

  • 在我看来,您应该保存图形的位图,而不是您从中获取图像的位图......换句话说,graphicImage 可能正在修改它自己的 BitmapImage 副本,而您正在保存原版。

标签: asp.net visual-studio drawstring


【解决方案1】:

您的代码运行良好;您只需指定要保存图像的路径:

例子:

//Load the Image to be written on.
        Bitmap bitMapImage = new
        System.Drawing.Bitmap((@"c:\\foo\\generic.jpg"));
        Graphics graphicImage = Graphics.FromImage(bitMapImage);
        graphicImage.DrawString("testing 1 2 3",
        new Font("Arial", 20, FontStyle.Bold),
        SystemBrushes.WindowText, new Point(0, 0)); 
        bitMapImage.Save("c:\\foo\\bitmaptest.jpg", ImageFormat.Jpeg);
        graphicImage.Dispose();
        bitMapImage.Dispose();

注意在您的情况下,bitMapImage.Save 需要如下:bitMapImage.Save(Server.MapPath("~/Images")+"newImage.jpg",ImageFormat.Jpeg); 因为您正试图将图像保存在 asp.net 应用程序上。在我的示例中,~/Images 只是您应用中的虚拟目录 Images

【讨论】:

  • 有效!我将颜色更改为纯蓝色位图,并且有我的文字!呃,正如他们所说。奇怪的是,我正在写的图像有白色背景,但文字似乎没有出现。可能我的图片有问题,我会重新保存并重试。
  • 像魅力一样工作!再次感谢。
【解决方案2】:

是的..您正在保存相同的图像。您必须创建一个新的 wbitmap 并保存它:-

Bitmap bitMapNew = Bitmap.FromHbitmap(graphicImage.GetHdc());
bitMapNew.Save("bitmaptest.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

添加这些行而不是您的 bitMapImage.save

【讨论】:

  • 我收到错误消息,第一行显示“GDI+ 中发生一般错误”。我在网上看了一点,感觉可能是bug,你以前遇到过吗?
  • 应该是你的路径有问题,参考stackoverflow.com/questions/6826921/…
  • 再次感谢您的所有帮助和回复,我会看看我是否可以让它同时工作。
猜你喜欢
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 2018-05-27
相关资源
最近更新 更多