Как поместить надпись на картинку GIF/Jpeg
Задача: поместить надпись на картинку GIF.
При использовании вот такого кода:
Bitmap myBitmap = new Bitmap("myimg.gif");
Graphics g = Graphics.FromImage(myBitmap);
Возникает исключение «A Graphics object cannot be created from an image that has an indexed pixel format.»
indexed format — это формат, где каждый пиксел изображения представлен индексом в палитре. Например, в индексированном формате 8bpp каждый пиксел — байт 0..255, индекс в таблице из 256 цветов. Индексированные форматы — 1bpp, 4bpp, 8bpp. С JPEG такой ошибки не возникает.
А избежать вышеупомянутого исключения можно при помощи создания нового битмапа с размерами оригинала и вывода в него исходного изображения при помощи DrawImage (пример ниже).
{
Response.ContentType = "image/gif";
Bitmap myBitmap = new Bitmap(Server.MapPath("myimg.gif")); // берем изображение GIF
Bitmap tmp = new Bitmap(myBitmap.Width, myBitmap.Height); // создаем новый битмап
Graphics g = Graphics.FromImage(tmp);
//выгружаем оригинальный битмап в новый.
g.DrawImage(myBitmap, new Rectangle(0, 0, tmp.Width, tmp.Height), 0, 0, myBitmap.Width, myBitmap.Height, GraphicsUnit.Pixel);
//помещаем текст в левый верхний угол
g.DrawString("привет!", new Font("Times New Roman", 12), Brushes.Black, new PointF(0, 0));
//сохраняем, отправляем в браузер
tmp.Save(Response.OutputStream, ImageFormat.Gif);
Response.End();
}
Пример хороший, но чтобы он был более интересным и полезным читателю, можон было бы показать, как сделать свою каптчу. Полностью писать пример не нужно, но подтолкнуть читателя. Это не придирка, а пожелание. Может это будет темой одной из последующих заметок?
Спасибо за пост :) Понадобился при подписывании загружаемых картинок.