Страницы

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

среда, 18 декабря 2019 г.

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

#c_sharp #изображения


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


Ответы

Ответ 1



Да запросто. Например, можно воспользоваться 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); } } } Получаются вот такие картинки:

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

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