Страницы

Поиск по вопросам

вторник, 30 октября 2018 г.

Как наложить текст на изображение в C#?

каким наиболее простым способом можно программно наложить текст на изображение? в какую сторону копать, и какими библиотеками это проще всего сделать.


Ответ

Да запросто. Например, можно воспользоваться WPF-овскими средствами.
Создайте консольное приложение, добавьте ссылки на сборки WindowsBase и PresentationCore.
Пишем!
using System; using System.Globalization; using System.IO; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging;
namespace TextOnImage { class Program { static void Main(string[] args) { // параметры --> var imagePath = @"D:\input.jpg"; var text = "Это норма!"; var resultPath = @"D:\output.jpg";
var background = Brushes.Black; var textColor = Brushes.White;
var gap = 20; var fontSize = 70;
var dpi = 96;
var font = new Typeface( new FontFamily("Segoe UI"), FontStyles.Normal, FontWeights.Bold, FontStretches.SemiExpanded); // <--
var image = BitmapFrame.Create(new Uri("file://" + imagePath)); var imageWidth = (double)image.PixelWidth; var imageHeight = (double)image.PixelHeight;
var formattedText = new FormattedText( text, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, font, fontSize, textColor, dpi) { MaxTextWidth = imageWidth, TextAlignment = TextAlignment.Center };
var textWidth = formattedText.Width; var textHeight = formattedText.Height;
var totalWidth = (int)Math.Ceiling(imageWidth + 2 * gap); var totalHeight = (int)Math.Ceiling(imageHeight + 3 * gap + textHeight);
var drawingVisual = new DrawingVisual(); using (var drawingContext = drawingVisual.RenderOpen()) { drawingContext.DrawRectangle( background, null, new Rect(0, 0, totalWidth, totalHeight));
drawingContext.DrawImage( image, new Rect(gap, gap, imageWidth, imageHeight)); drawingContext.DrawText( formattedText, new Point(gap, imageHeight + 2 * gap)); }
var bmp = new RenderTargetBitmap( totalWidth, totalHeight, dpi, dpi, PixelFormats.Pbgra32); bmp.Render(drawingVisual);
var encoder = new JpegBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bmp)); using (var stream = File.Create(resultPath)) encoder.Save(stream); } } }
Получаются вот такие картинки:

Комментариев нет:

Отправить комментарий