2012-05-24 7 views
1

Я использую следующий код (кредит Dolph Larson), чтобы взять предварительно сделанный файл изображения в растровом формате на сервере ASP.net , нарисуйте на нем строку и сохраните ее на файл на сервере. В исходном коде он выгружает растровое изображение в OutputStream, но я бы хотел сбросить его в файл.Добавление текста в JPG-изображение в ASP.net C# и сохранение в файл на сервере

Версия кода ниже успешно создает новый файл, но когда я его открываю, строка не отображается на изображении в новом файле. Я предполагаю, что мне не хватает шага - когда я использую 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(); 

Заранее спасибо!

+0

Мне кажется, вы должны сохранить растровое изображение графики, а не растровое изображение, которое вы взяли с изображения ... другими словами, graphicImage может изменять свою собственную копию BitmapImage, и вы сохраняете исходную. – Machinarius

ответ

2

Ваш код работает только штраф; Вам просто нужно указать путь, по которому вы хотите сохранить изображение:

Пример:

//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 внутри вашего приложения.

+0

Он работает! Я изменил цвет на сплошное синее растровое изображение, и появился мой текст! Дух, как говорится. Как ни странно, изображение, на котором я писал, имеет белый фон, но текст, похоже, не появился. Может быть, есть некоторые проблемы с моим изображением, я буду сохранять и повторить попытку. –

+0

Работает как очарование! Еще раз спасибо. –

1

Да ..You спасают то же изображение .Вы должны создать пе wbitmap и сохранить его: -

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

Добавьте эти строки вместо вашего bitMapImage.save

+0

Я получаю сообщение об ошибке, в котором говорится «Общая ошибка, произошедшая в GDI +» в первой строке. Я немного посмотрел в Интернете, и похоже, что это может быть ошибка, с которой вы столкнулись раньше? –

+0

Это должно быть проблема с вашим путем. Обратитесь к http://stackoverflow.com/questions/6826921/write-text-on-an-image-in-c-sharp –

+0

Еще раз спасибо за вашу помощь и ответ, я увидит, смогу ли я заставить его работать в обоих направлениях. –

 Смежные вопросы

  • Нет связанных вопросов^_^