public void Stamp(ThumbnailSheetCreateRequest request, string filePath, TimeSpan time) { var stampText = time.ToString(request.VideoDurationInSeconds >= 3600 ? @"hh\:mm\:ss" : @"mm\:ss"); var tempFilePath = filePath + ".tmp.png"; using (var imgText = new MagickImage(filePath)) { var drawable = new DrawableText(5, 5, stampText); var gravity = new DrawableGravity(Gravity.Southeast); var font = new DrawableFont("Tahoma"); var antialias = new DrawableTextAntialias(true); var size = new DrawableFontPointSize(48); var color = new DrawableFillColor(MagickColors.Black); var strokecolor = new DrawableStrokeColor(MagickColors.AliceBlue); imgText.Draw(drawable, gravity, font, antialias, size, color, strokecolor); imgText.Write(tempFilePath); } File.Delete(filePath); File.Move(tempFilePath, filePath); }
public static string AddTextToImage(string imageFile, string text) { var image = new MagickImage(imageFile); using (var imgText = new MagickImage()) { var drawable = new DrawableText(0, 10, text); var gravity = new DrawableGravity(Gravity.North); var font = new DrawableFont("Arial"); var antialias = new DrawableTextAntialias(true); var size = new DrawableFontPointSize(50); var color = new DrawableFillColor(Color.Snow); var strokeColor = new DrawableStrokeColor(Color.OrangeRed); image.Draw(drawable, gravity, font, antialias, size, color, strokeColor); } // Save the result string outputImage = TempFolder + "\\waterMark_" + Path.GetFileName(imageFile); image.Write(outputImage); return(outputImage); }
private static TextSize DrawText(MagickImage image, string line, double[] spaces, double offsetX, double offsetY, Gravity position, bool measureOnly) { if (string.IsNullOrWhiteSpace(line)) { return(new TextSize(0d, 0d)); } image.Settings.TextAntiAlias = true; // image.Settings.TextInterwordSpacing = 0; // image.Settings.TextInterlineSpacing = 0; if (spaces == null || spaces.Length == 0) { if (!measureOnly) { var gravity = new DrawableGravity(position); var drawable = new DrawableText(offsetX, offsetY, line); image.Draw(drawable, gravity); } var metrics = Measure(image, line); return(new TextSize(metrics.TextWidth, metrics.Ascent - metrics.Descent)); } else { var words = line.Split(' '); var metrics = words.Select(x => Measure(image, x, true)).ToArray(); var totalSpace = words.Take(words.Length - 1).Select((x, i) => i < spaces.Length ? spaces[i] : spaces.LastOrDefault()).Sum(); var totalWidth = metrics.Select(x => x.TextWidth).Sum() + totalSpace; var totalHeight = metrics.Select(x => x.Ascent - x.Descent).Max(); if (!measureOnly) { double currentX, currentY; switch (position) { case Gravity.West: case Gravity.Northwest: case Gravity.Southwest: case Gravity.Undefined: currentX = offsetX; break; case Gravity.North: case Gravity.Center: case Gravity.South: currentX = image.Width / 2d - totalWidth / 2 + offsetX; break; case Gravity.East: case Gravity.Northeast: case Gravity.Southeast: currentX = image.Width - totalWidth - offsetX; break; default: currentX = 0d; break; } switch (position) { case Gravity.Northwest: case Gravity.North: case Gravity.Northeast: case Gravity.Undefined: currentY = offsetY; break; case Gravity.West: case Gravity.Center: case Gravity.East: currentY = image.Height / 2d - totalHeight / 2 + offsetY; break; case Gravity.Southwest: case Gravity.South: case Gravity.Southeast: currentY = image.Height - totalHeight - offsetY; break; default: currentY = 0d; break; } var gravity = new DrawableGravity(Gravity.Northwest); for (var i = 0; i < words.Length; i++) { if (!string.IsNullOrWhiteSpace(words[i])) { image.Draw(new DrawableText(currentX, currentY, words[i]), gravity); } currentX += metrics[i].TextWidth + (i < spaces.Length ? spaces[i] : spaces.LastOrDefault()); } } return(new TextSize(totalWidth, totalHeight)); } }