Добавление текста в файл изображения

Мне нужно добавить текст в файл изображения. Мне нужно прочитать один файл изображения (jpg, png, gif), и мне нужно добавить к нему один текст строки.

Ответ 1

Хорошо в GDI + вы читали в файле с помощью класса Image, а затем использовали класс Graphics для добавления в него текста. Что-то вроде:

  Image image = Image.FromFile(@"c:\somepic.gif"); //or .jpg, etc...
  Graphics graphics = Graphics.FromImage(image);
  graphics.DrawString("Hello", this.Font, Brushes.Black, 0, 0);

Если вы хотите сохранить файл поверх старого, код должен немного измениться, поскольку метод Image.FromFile() блокирует файл до его удаления. Ниже приводится то, что я придумал:

  FileStream fs = new FileStream(@"c:\somepic.gif", FileMode.Open, FileAccess.Read);
  Image image = Image.FromStream(fs);
  fs.Close();

  Bitmap b = new Bitmap(image);
  Graphics graphics = Graphics.FromImage(b);
  graphics.DrawString("Hello", this.Font, Brushes.Black, 0, 0);

  b.Save(@"c:\somepic.gif", image.RawFormat);

  image.Dispose();
  b.Dispose();

Я бы испытал это довольно тщательно, хотя:)

Ответ 2

В частности, для gif, чтобы иметь результат gif, вы должны писать на каждом кадре, как показано ниже:

string originalImgPath = @"C:\test.gif";
Image IMG = Image.FromFile(originalImgPath);
FrameDimension dimension = new FrameDimension(IMG.FrameDimensionsList[0]);
int frameCount = IMG.GetFrameCount(dimension);
int Length = frameCount;
GifBitmapEncoder gEnc = new GifBitmapEncoder();
for (int i = 0; i < Length; i++)
{
    // Get each frame
    IMG.SelectActiveFrame(dimension, i);
    var aFrame = new Bitmap(IMG);

    // write one the selected frame
    Graphics graphics = Graphics.FromImage(aFrame);
    graphics.DrawString("Hello", new Font("Arial", 24, System.Drawing.FontStyle.Bold), System.Drawing.Brushes.Black, 50, 50);
    var bmp = aFrame.GetHbitmap();
    var src = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                bmp,
                IntPtr.Zero,
                Int32Rect.Empty,
                BitmapSizeOptions.FromEmptyOptions());
    // merge frames
    gEnc.Frames.Add(BitmapFrame.Create(src));
}

string saveImgFile = @"C:\modified_test.gif"
using (FileStream fs2 = new FileStream(saveImgFile, FileMode.Create))
{
    gEnc.Save(fs2);
}

Я должен был упомянуть, что получение gif-кадров из этого сообщения.

Ответ 3

Вы можете сделать это, используя объект Graphics в С#. Вы можете получить объект Graphics из изображения (image.CreateGraphics() - или что-то вроде этого, как я помню), и использовать некоторые встроенные методы для добавления к нему текста, например: Graphycs.DrawString() или другие связанные методы.