AskalotLearnalot Ответов: 1

Как увеличить изображение с помощью растрового изображения


У меня есть и изображение с текстом, чтобы убедиться, что текст в нижней части изображения не будет покрыт моим текстом водяного знака, Я хочу сделать новое изображение больше - > water mark it - > save

Что я уже пробовал:

Вот мой метод, новое изображение "tempBitmap" действительно имеет новый размер, потому что, когда я иду в свойства изображения, исходный размер изображения меньше, чем новый. Однако текст водяного знака по-прежнему покрывает текст изображения

public void waterMark(string text, string sourcePath, string destinationPathh)
       {
           using (Bitmap bitmap = new Bitmap(sourcePath))
           {
               Bitmap tempBitmap = new Bitmap((bitmap.Width + 30), (bitmap.Height + 30));//added +30 to make image larger
               using (Graphics graphics = Graphics.FromImage(tempBitmap))
               {
                   graphics.DrawImage(bitmap, 0, 0, bitmap.Width, bitmap.Height);
                   Brush brush = new SolidBrush(Color.Black);
                   Font font = new Font("Arial", 50, FontStyle.Italic, GraphicsUnit.Pixel);
                   SizeF textSize = new SizeF();
                   textSize = graphics.MeasureString(text, font);
                   Point position = new Point(bitmap.Width - ((int)textSize.Width + 200), bitmap.Height - ((int)textSize.Height + 10));// played around with the +10 to locate the water mark no luck.
                   graphics.DrawString((text), font, brush, position);
                   tempBitmap.Save(destinationPathh, ImageFormat.Tiff);
               }
           }
       }

спасибо.

1 Ответов

Рейтинг:
2

F-ES Sitecore

Эта версия сначала получает размеры текста и создает новое растровое изображение с высотой выше ширины текста + 10 (не нужно менять ширину). При позиционировании текста он помещает его на 5 ниже исходной высоты, центрируя его в новом пространстве ниже, и центрирует его горизонтально. Вам нужно будет сделать дополнительные проверки, например, убедиться, что текст не шире изображения, возможно, уменьшить размер шрифта, если это так.

using (Bitmap bitmap = new Bitmap(sourcePath))
{
    Brush brush = new SolidBrush(Color.Black);
    Font font = new Font("Arial", 50, FontStyle.Italic, GraphicsUnit.Pixel);

    Bitmap tempBitmap = new Bitmap(bitmap.Width, bitmap.Height);
    Graphics tempGraphics = Graphics.FromImage(tempBitmap);
                
    SizeF textSize = tempGraphics.MeasureString(text, font);

    tempBitmap = new Bitmap(bitmap.Width, bitmap.Height + (int)textSize.Height + 10);

    using (Graphics graphics = Graphics.FromImage(tempBitmap))
    {
        graphics.DrawImage(bitmap, 0, 0, bitmap.Width, bitmap.Height);
        Point position = new Point((int)((bitmap.Width - textSize.Width) / 2), bitmap.Height + 5);
        graphics.DrawString((text), font, brush, position);
        tempBitmap.Save(destinationPathh, ImageFormat.Tiff);
    }
}


AskalotLearnalot

Вот ответ с небольшими правками, которые работают. спасибо за помощь.


            using (Bitmap bitmap = new Bitmap(sourcePath))
            {
                Brush brush = new SolidBrush(Color.Black);
                Font font = new Font("Arial", 50, FontStyle.Italic, GraphicsUnit.Pixel);
                Bitmap tempBitmap = new Bitmap(bitmap.Width, bitmap.Height);
                Graphics tempGraphics = Graphics.FromImage(tempBitmap);
                SizeF textSize = tempGraphics.MeasureString(text, font);
                tempBitmap = new Bitmap(bitmap.Width, bitmap.Height + (int)textSize.Height + 10);
                tempBitmap.SetResolution(bitmap.HorizontalResolution, bitmap.VerticalResolution);
                using (Graphics graphics = Graphics.FromImage(tempBitmap))
                {
                    graphics.FillRectangle(Brushes.White, 0, 0, bitmap.Width, bitmap.Height + 100);
                    graphics.DrawImage(bitmap,0,0 , bitmap.Width, bitmap.Height );
                    Point position = new Point(bitmap.Width - ((int)textSize.Width + 200), bitmap.Height+5);
                    
                    graphics.DrawString((text), font, brush, position);
                    
                    tempBitmap.Save(destinationPathh, ImageFormat.Tiff);

                 
                }
            }