Помогите подправить снипет C# (работа с изображениями)

mrgreyarbtr

Пользователь
Регистрация
01.10.2022
Сообщения
99
Благодарностей
30
Баллы
18
Данный снипет я нашел на просторах данного форума:

С помощью него хочу разметить текст на картинке с выбранным шрифтом, но проблема в том, что выбранный шрифт не подтягивается, а выбирается какой-то стандартный.
Не рабочий:
string bgPath = project.Variables["DefaultNavBar"].Value;
string saveImgPath = project.Variables["SavePathImage"].Value;
string text = project.Variables["UserName"].Value; // переменная с текстом который будет на изображении.
Image image = Image.FromFile(bgPath);//картинка из файла
Graphics graphics = Graphics.FromImage(image);
    Font drawFont = new Font("SF-Pro-Text-Semibold", 30, FontStyle.Bold);
    //цвет
    SolidBrush drawBrush = new SolidBrush(Color.Black);
    //отступы слева, сверху, размер прямоугольника в который будет вписан текст
    RectangleF drawRect = new RectangleF(25, 50, image.Width-50, image.Height-50);
    //выравнивание текста
    StringFormat drawFormat = new StringFormat();
    //горизонтальное
    drawFormat.Alignment = StringAlignment.Center;
    //вертикальное
    drawFormat.LineAlignment = StringAlignment.Center;
    //пишем текст
    graphics.DrawString(text, drawFont, drawBrush,drawRect,drawFormat);
    //сохраняем файл   
    image.Save(saveImgPath);
В том же шаблоне, использую данный снипет, который рабочий и подтягивает нормально шрифт.

Рабочий:
string InputImagePath = project.Variables["SavePathImage"].Value;
string SaveImagePath = project.Variables["SavePathImage"].Value;
string Time = project.Variables["Time"].Value;
using (MagickImage image = new MagickImage(InputImagePath)){
     MagickReadSettings readSettings = new MagickReadSettings{
        FillColor = MagickColors.Black, // цвет текста
        BackgroundColor = MagickColors.Transparent, // фон текста
        Font = "SF-Pro-Text-Semibold", // Шрифт текста (только те, что установлены в Windows)
        Width = 90, // Ширина текста
        Height = 38 }; // Высота текста
    image.Alpha(AlphaOption.Opaque);
    using (MagickImage label = new MagickImage("label:"+Time, readSettings)){
        image.Composite(label, 50, 27, CompositeOperator.Over); // расположение текста на картинке 200 слева, 100 сверху
        image.Write(SaveImagePath);
    }
}
Помогите пожалуйста починить первый снипет, чтобы выбранный шрифт использовался, так как там оно ставит текст по центру, а во втором это не получается.
 

mrgreyarbtr

Пользователь
Регистрация
01.10.2022
Сообщения
99
Благодарностей
30
Баллы
18

djaga

Client
Регистрация
26.04.2020
Сообщения
505
Благодарностей
1 054
Баллы
93
Последнее редактирование:
  • Спасибо
Реакции: Scorpic и Sho

mrgreyarbtr

Пользователь
Регистрация
01.10.2022
Сообщения
99
Благодарностей
30
Баллы
18
А что мешает использовать второй вариант? upd: Понял почему. Этот вопрос снят.)
Как я понял, что это разные библиотеки. Вы же просто в разных местах брали?
Да, в поиске по форуму
 

djaga

Client
Регистрация
26.04.2020
Сообщения
505
Благодарностей
1 054
Баллы
93
Данный снипет я нашел на просторах данного форума:

С помощью него хочу разметить текст на картинке с выбранным шрифтом, но проблема в том, что выбранный шрифт не подтягивается, а выбирается какой-то стандартный.
Не рабочий:
string bgPath = project.Variables["DefaultNavBar"].Value;
string saveImgPath = project.Variables["SavePathImage"].Value;
string text = project.Variables["UserName"].Value; // переменная с текстом который будет на изображении.
Image image = Image.FromFile(bgPath);//картинка из файла
Graphics graphics = Graphics.FromImage(image);
    Font drawFont = new Font("SF-Pro-Text-Semibold", 30, FontStyle.Bold);
    //цвет
    SolidBrush drawBrush = new SolidBrush(Color.Black);
    //отступы слева, сверху, размер прямоугольника в который будет вписан текст
    RectangleF drawRect = new RectangleF(25, 50, image.Width-50, image.Height-50);
    //выравнивание текста
    StringFormat drawFormat = new StringFormat();
    //горизонтальное
    drawFormat.Alignment = StringAlignment.Center;
    //вертикальное
    drawFormat.LineAlignment = StringAlignment.Center;
    //пишем текст
    graphics.DrawString(text, drawFont, drawBrush,drawRect,drawFormat);
    //сохраняем файл
    image.Save(saveImgPath);
В том же шаблоне, использую данный снипет, который рабочий и подтягивает нормально шрифт.

Рабочий:
string InputImagePath = project.Variables["SavePathImage"].Value;
string SaveImagePath = project.Variables["SavePathImage"].Value;
string Time = project.Variables["Time"].Value;
using (MagickImage image = new MagickImage(InputImagePath)){
     MagickReadSettings readSettings = new MagickReadSettings{
        FillColor = MagickColors.Black, // цвет текста
        BackgroundColor = MagickColors.Transparent, // фон текста
        Font = "SF-Pro-Text-Semibold", // Шрифт текста (только те, что установлены в Windows)
        Width = 90, // Ширина текста
        Height = 38 }; // Высота текста
    image.Alpha(AlphaOption.Opaque);
    using (MagickImage label = new MagickImage("label:"+Time, readSettings)){
        image.Composite(label, 50, 27, CompositeOperator.Over); // расположение текста на картинке 200 слева, 100 сверху
        image.Write(SaveImagePath);
    }
}
Помогите пожалуйста починить первый снипет, чтобы выбранный шрифт использовался, так как там оно ставит текст по центру, а во втором это не получается.
Хм, мне больше привычнее было работать с ImageMagick и поэтому разобрал ваш скрытый вопрос. Как же сделать текст по центру.
Ответы ниже:
Вариант №1 когда нужен текст на картинке по центру:
string inputImagePath = project.Directory + $"/{project.Variables["nameImage"].Value}.png";
string saveImagePath = project.Directory + $"/{project.Variables["nameImage"].Value} [Modified].png";
string text = DateTime.Now.ToString("dd.MM.yyyy HH.mm.ss");

using (MagickImage image = new MagickImage(inputImagePath))
{
    MagickReadSettings readSettings = new MagickReadSettings
    {
        FillColor = MagickColors.Red,
        BackgroundColor = MagickColors.Transparent,
        Font = "SF-Pro-Text-Semibold",
        Width = 500,
        Height = 80,
    };
    image.Alpha(AlphaOption.Opaque);
    using (MagickImage label = new MagickImage("label:" + text, readSettings))
    {
        // координаты текста по центру
        int x = (image.Width - label.Width) / 2;
        int y = (image.Height - label.Height) / 2;

        image.Composite(label, x, y, CompositeOperator.Over);
        image.Write(saveImagePath);
    }
}
Вариант №2 когда нужен текст на картинке по центру:
string inputImagePath = project.Directory + $"/{project.Variables["nameImage"].Value}.png";
string saveImagePath = project.Directory + $"/{project.Variables["nameImage"].Value} [Modified].png";
string text = DateTime.Now.ToString("dd.MM.yyyy HH.mm.ss");

using (MagickImage image = new MagickImage(inputImagePath))
{
    MagickReadSettings readSettings = new MagickReadSettings
    {
        FillColor = MagickColors.Red,
        BackgroundColor = MagickColors.Transparent,
        Font = "SF-Pro-Text-Semibold",
        Width = 500,
        Height = 80,
    };
    image.Alpha(AlphaOption.Opaque);
    using (MagickImage label = new MagickImage("label:" + text, readSettings))
    {
        image.Composite(label, Gravity.Center, CompositeOperator.Over);
        image.Write(saveImagePath);
    }
}
Результат:
pic [Modified].png
 

mrgreyarbtr

Пользователь
Регистрация
01.10.2022
Сообщения
99
Благодарностей
30
Баллы
18
Хм, мне больше привычнее было работать с ImageMagick и поэтому разобрал ваш скрытый вопрос. Как же сделать текст по центру.
Ответы ниже:
Вариант №1 когда нужен текст на картинке по центру:
string inputImagePath = project.Directory + $"/{project.Variables["nameImage"].Value}.png";
string saveImagePath = project.Directory + $"/{project.Variables["nameImage"].Value} [Modified].png";
string text = DateTime.Now.ToString("dd.MM.yyyy HH.mm.ss");

using (MagickImage image = new MagickImage(inputImagePath))
{
    MagickReadSettings readSettings = new MagickReadSettings
    {
        FillColor = MagickColors.Red,
        BackgroundColor = MagickColors.Transparent,
        Font = "SF-Pro-Text-Semibold",
        Width = 500,
        Height = 80,
    };
    image.Alpha(AlphaOption.Opaque);
    using (MagickImage label = new MagickImage("label:" + text, readSettings))
    {
        // координаты текста по центру
        int x = (image.Width - label.Width) / 2;
        int y = (image.Height - label.Height) / 2;

        image.Composite(label, x, y, CompositeOperator.Over);
        image.Write(saveImagePath);
    }
}
Вариант №2 когда нужен текст на картинке по центру:
string inputImagePath = project.Directory + $"/{project.Variables["nameImage"].Value}.png";
string saveImagePath = project.Directory + $"/{project.Variables["nameImage"].Value} [Modified].png";
string text = DateTime.Now.ToString("dd.MM.yyyy HH.mm.ss");

using (MagickImage image = new MagickImage(inputImagePath))
{
    MagickReadSettings readSettings = new MagickReadSettings
    {
        FillColor = MagickColors.Red,
        BackgroundColor = MagickColors.Transparent,
        Font = "SF-Pro-Text-Semibold",
        Width = 500,
        Height = 80,
    };
    image.Alpha(AlphaOption.Opaque);
    using (MagickImage label = new MagickImage("label:" + text, readSettings))
    {
        image.Composite(label, Gravity.Center, CompositeOperator.Over);
        image.Write(saveImagePath);
    }
}
Результат:
Посмотреть вложение 101012
Огонь! Как могу отблагодарить? TRC20 есть?
 
  • Спасибо
Реакции: orka13

djaga

Client
Регистрация
26.04.2020
Сообщения
505
Благодарностей
1 054
Баллы
93

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)