Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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));
            }
        }