1 место Библиотека Magick.NET C# (Image Magick), работа с изображениями, и другие полезняшки.

amaluser

Client
Регистрация
14.07.2020
Сообщения
19
Благодарностей
1
Баллы
3
Выдает такую ошибку, не подскажите что нужно делать? Вообще новичок в этой теме.
112080
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 837
Благодарностей
2 045
Баллы
113
Выдает такую ошибку, не подскажите что нужно делать? Вообще новичок в этой теме.Посмотреть вложение 112080
Посмотрите в старт посте под спойлером про подключение using, проверьте все ли сделано, как там написано. те ли версии dll используете.
 

amaluser

Client
Регистрация
14.07.2020
Сообщения
19
Благодарностей
1
Баллы
3
Посмотрите в старт посте под спойлером про подключение using, проверьте все ли сделано, как там написано. те ли версии dll используете.
Да неправильно прописал , using . Спасибо
 

MaxMassa

Client
Регистрация
26.01.2019
Сообщения
5
Благодарностей
0
Баллы
1
Подскажите в чем может быть проблема?

Выполнение действия CSharp OwnCode. Инициализатор типа "NativeMagickSettings" выдал исключение.
 

jaka1

Client
Регистрация
10.03.2015
Сообщения
44
Благодарностей
14
Баллы
8
Подскажите в чем может быть проблема?

Выполнение действия CSharp OwnCode. Инициализатор типа "NativeMagickSettings" выдал исключение.
Вам не хватаетMagick.Native-Q16-HDRI-x64.dll (ну или х86)в ExternalAssemblies
 
  • Спасибо
Реакции: MaxMassa

Danilbjj

Новичок
Регистрация
17.06.2020
Сообщения
5
Благодарностей
0
Баллы
1
Всем привет! Помогите разобраться.

Перешёл на сайт https://imagemagick-org.translate.goog/script/download.php?_x_tr_sl=en&_x_tr_tl=ru&_x_tr_hl=ru#windows
где скачивать библиотеку, файла с расширением dll я там не нашёл, там есть ImageMagick-7.1.1-29-Q8-x64-dll.exe
Скачал его, и установил. В установленной папке нет данной библиотеки Magick.NET-Q8-AnyCPU.dll и даже похожей нет.
Подскажите от куда её скачать?

***Нашёл)***
 
Последнее редактирование:

Danilbjj

Новичок
Регистрация
17.06.2020
Сообщения
5
Благодарностей
0
Баллы
1
Подскажите пожалуйста, как реализовать.

Есть у меня допустим картинка 750х750 пикселей.

Мне необходимо ровно в середину (примерно в размер 600х600 пикселей) написать текст. Текст может быть как 5 слов, так и несколько предложений. В зависимости от длины текста, чтобы менялся размер шрифта.

Заранее благодарю!
 

Alexmotors

Новичок
Регистрация
01.02.2020
Сообщения
3
Благодарностей
0
Баллы
1
Всем привет! Помогите разобраться.

Перешёл на сайт https://imagemagick-org.translate.goog/script/download.php?_x_tr_sl=en&_x_tr_tl=ru&_x_tr_hl=ru#windows
где скачивать библиотеку, файла с расширением dll я там не нашёл, там есть ImageMagick-7.1.1-29-Q8-x64-dll.exe
Скачал его, и установил. В установленной папке нет данной библиотеки Magick.NET-Q8-AnyCPU.dll и даже похожей нет.
Подскажите от куда её скачать?

***Нашёл)***
где она? глаза сломал
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 857
Благодарностей
1 579
Баллы
113

jaka1

Client
Регистрация
10.03.2015
Сообщения
44
Благодарностей
14
Баллы
8
Подскажите пожалуйста, как реализовать.

Есть у меня допустим картинка 750х750 пикселей.

Мне необходимо ровно в середину (примерно в размер 600х600 пикселей) написать текст. Текст может быть как 5 слов, так и несколько предложений. В зависимости от длины текста, чтобы менялся размер шрифта.

Заранее благодарю!
C#:
            // Путь к исходному изображению
            string imagePath = @"C:\\Program Files\\ZennoLab\\RU\\ZennoPoster Pro V7\\7.7.5.0\\Progs\\imageR.jpg";

              // Создание объекта изображения
            using (MagickImage image = new MagickImage(imagePath))
            {
                // Установка параметров текста
                MagickReadSettings settings = new MagickReadSettings
                {
                    TextGravity = Gravity.Center,
                    BackgroundColor = MagickColors.Transparent,
                    FillColor = MagickColors.Black,
                    Width = 600,
                    Height = 600
                };

                // Текст, который нужно добавить на изображение
                string text = "Ваш текст здесь";

                // Создание объекта для добавления текста
                using (MagickImage textImage = new MagickImage($"caption:{text}", settings))
                {
                    // Наложение текста на изображение в середину
                    image.Composite(textImage, (image.Width - textImage.Width) / 2, (image.Height - textImage.Height) / 2, CompositeOperator.Over);
                }

                // Сохранение измененного изображения
                string outputImagePath = "image.jpg";
                image.Write(outputImagePath);
            }
Если размер шрифта не указан, то он будет пытаться занять все пространство: мало слов - больше шрифт, много текста - мелкий шрифт.
 
  • Спасибо
Реакции: Danilbjj

jaka1

Client
Регистрация
10.03.2015
Сообщения
44
Благодарностей
14
Баллы
8
  • Спасибо
Реакции: Alexmotors

simbioz

Client
Регистрация
31.08.2014
Сообщения
157
Благодарностей
28
Баллы
28
Подскажите плиз, как наложить рамку на картинку с возможностью менять размер рамки и ее цвет, за ранее благодарю.
 

quickmouse

Client
Регистрация
19.11.2010
Сообщения
110
Благодарностей
12
Баллы
18
Ребят, подскажите плз кто может на net фреймворке софт написать?
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 837
Благодарностей
2 045
Баллы
113
Ребят, подскажите плз кто может на net фреймворке софт написать?
Это лучше в тему с поиском исполнителей написать, и конкретизировать какой функционал софта хотите и какой бюджет на разработку.
 
  • Спасибо
Реакции: quickmouse

QUNILzt

Новичок
Регистрация
20.05.2024
Сообщения
4
Благодарностей
1
Баллы
1
ООООО на с шарп брат от душии
 

x_tonic

Client
Регистрация
24.11.2018
Сообщения
25
Благодарностей
1
Баллы
3
JPG в WEBP
C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению .jpg
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение .webp
int quality = 80; // желаемое качество от 1 до 100
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Format = MagickFormat.WebP;
       image.Quality = quality;
       image.Write(SaveImagePath);
}
Подскажите пожалуйста как исправить ошибку чтоб уменьшить качество .webp & .jpeg изображения.

Пробывал менять версии Magick.NET-Q8-AnyCPU на ту которая стоит в посту выше, 13.1.2, 13.6.0 и на актуальную. Оригинальная авторкская версия .dll из шаблона не работает с кубиком, все обновления выдают следующию ошибку.

""Компиляция кода Ошибка в действии "CS0234" "Ошибка в директивах using. The type or namespace name 'Defines' does not exist in the namespace 'ImageMagick' (are you missing an assembly reference?)". [Строка: 4; Cтолбец: 19]""
 

Damb

Новичок
Регистрация
22.07.2024
Сообщения
3
Благодарностей
0
Баллы
1
супер статья
 

jaka1

Client
Регистрация
10.03.2015
Сообщения
44
Благодарностей
14
Баллы
8
Подскажите пожалуйста как исправить ошибку чтоб уменьшить качество .webp & .jpeg изображения.

Пробывал менять версии Magick.NET-Q8-AnyCPU на ту которая стоит в посту выше, 13.1.2, 13.6.0 и на актуальную. Оригинальная авторкская версия .dll из шаблона не работает с кубиком, все обновления выдают следующию ошибку.

""Компиляция кода Ошибка в действии "CS0234" "Ошибка в директивах using. The type or namespace name 'Defines' does not exist in the namespace 'ImageMagick' (are you missing an assembly reference?)". [Строка: 4; Cтолбец: 19]""
Код рабочий. У вас не прописан using, либо вы привели не весь код и в вашем куске нет кода с ошибкой.
 
Последнее редактирование:

x_tonic

Client
Регистрация
24.11.2018
Сообщения
25
Благодарностей
1
Баллы
3
Код рабочий. У вас не прописан using, либо вы привели не весь код и в вашем куске нет кода с ошибкой.
123801

В проекте только один кубик который вы видите выше. Эти дерективы в прокте, нужно еще какойто добавить?
 

x_tonic

Client
Регистрация
24.11.2018
Сообщения
25
Благодарностей
1
Баллы
3

Lenin2009

Client
Регистрация
27.06.2016
Сообщения
63
Благодарностей
19
Баллы
8
Обрабываю капчу через Magick, подскажите как сделать чтобы символы капчи были менее жирные (чёрные символы на белом фоне) ? Такая функция вроде есть в капмонстр, не помню как называется, но надо через Magick.
 
Последнее редактирование:

lutidza

Client
Регистрация
26.05.2011
Сообщения
65
Благодарностей
15
Баллы
8
Отличная статья. Спасибо!
Можно с помощью этой библиотеки убрать watermark?
Типа как на этом сервисе https://www.watermarkremover.io
 

baracuda

Client
Регистрация
19.06.2013
Сообщения
855
Благодарностей
294
Баллы
63
Коллеги, может кто игрался с текстом. немогу придумать решение. текст разной длины, может влезть по длине, а может и нет. как бы придумать с переносом что то если много не влезает и от центровать, если чуток то можно и шрифт немного меньше сделать. Может кто то что то подобное делал ? Прикладываю тестовый вариант. Может кому то понадобится.

C#:
string inputImagePath = project.Variables["InputImagePath"].Value;
string outputPath = project.Variables["SaveImagePath"].Value;
string inputFont = project.Variables["Inputfont"].Value;
string inputText = project.Variables["Inputtext"].Value;

int width = 1000;  // Ширина итогового изображения
int height = 2000; // Высота итогового изображения
int textAreaHeight = height / 4; // Высота области для текста (1/4 высоты изображения)
int fontSize = 90; // Размер шрифта
MagickColor fontColor = new MagickColor("#FFFFFF"); // Цвет текста

// Создаем пустое изображение с фоном
using (MagickImage emptyImage = new MagickImage(new MagickColor("#808080"), width, height))
{
    // Настроим параметры для добавления текста
    MagickReadSettings readSettings = new MagickReadSettings
    {
        FillColor = fontColor, // цвет текста
        BackgroundColor = MagickColors.Transparent, // фон текста
        Font = inputFont, // Шрифт текста
        Width = width - 40, // Ширина текста (с отступами)
        Height = textAreaHeight - 40, // Высота текста (с отступами)
        FontPointsize = fontSize
    };

    // Генерируем изображение с текстом
    using (MagickImage label = new MagickImage($"label:{inputText}", readSettings))
    {
        // Располагаем текст по центру верхней 1/4 части изображения
        int textX = 20; // Отступ по горизонтали
        int textY = (textAreaHeight - label.Height) / 2; // Центрирование по вертикали в верхней 1/4
        emptyImage.Composite(label, textX, textY, CompositeOperator.Over);
    }

    // Загружаем изображение, которое нужно вставить в нижнюю половину
    using (MagickImage inputImage = new MagickImage(inputImagePath))
    {
        // Изменяем размер вставляемого изображения под ширину и высоту нижней половины
        inputImage.Resize(width, height / 2);

        // Композиция: накладываем изображение в нижнюю половину
        emptyImage.Composite(inputImage, 0, height / 2, CompositeOperator.Over);
    }

    // Сохраняем результат
    emptyImage.Write(outputPath);
}
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
5 002
Благодарностей
4 468
Баллы
113
Коллеги, может кто игрался с текстом. немогу придумать решение. текст разной длины, может влезть по длине, а может и нет. как бы придумать с переносом что то если много не влезает и от центровать, если чуток то можно и шрифт немного меньше сделать. Может кто то что то подобное делал ? Прикладываю тестовый вариант. Может кому то понадобится.

C#:
string inputImagePath = project.Variables["InputImagePath"].Value;
string outputPath = project.Variables["SaveImagePath"].Value;
string inputFont = project.Variables["Inputfont"].Value;
string inputText = project.Variables["Inputtext"].Value;

int width = 1000;  // Ширина итогового изображения
int height = 2000; // Высота итогового изображения
int textAreaHeight = height / 4; // Высота области для текста (1/4 высоты изображения)
int fontSize = 90; // Размер шрифта
MagickColor fontColor = new MagickColor("#FFFFFF"); // Цвет текста

// Создаем пустое изображение с фоном
using (MagickImage emptyImage = new MagickImage(new MagickColor("#808080"), width, height))
{
    // Настроим параметры для добавления текста
    MagickReadSettings readSettings = new MagickReadSettings
    {
        FillColor = fontColor, // цвет текста
        BackgroundColor = MagickColors.Transparent, // фон текста
        Font = inputFont, // Шрифт текста
        Width = width - 40, // Ширина текста (с отступами)
        Height = textAreaHeight - 40, // Высота текста (с отступами)
        FontPointsize = fontSize
    };

    // Генерируем изображение с текстом
    using (MagickImage label = new MagickImage($"label:{inputText}", readSettings))
    {
        // Располагаем текст по центру верхней 1/4 части изображения
        int textX = 20; // Отступ по горизонтали
        int textY = (textAreaHeight - label.Height) / 2; // Центрирование по вертикали в верхней 1/4
        emptyImage.Composite(label, textX, textY, CompositeOperator.Over);
    }

    // Загружаем изображение, которое нужно вставить в нижнюю половину
    using (MagickImage inputImage = new MagickImage(inputImagePath))
    {
        // Изменяем размер вставляемого изображения под ширину и высоту нижней половины
        inputImage.Resize(width, height / 2);

        // Композиция: накладываем изображение в нижнюю половину
        emptyImage.Composite(inputImage, 0, height / 2, CompositeOperator.Over);
    }

    // Сохраняем результат
    emptyImage.Write(outputPath);
}
Как в этой либе не знаю, но в c# есть метод Graphics.MeasureString позволяющий получить размеры строки до её добавления.
В цикле меняешь FontSize в сторону уменьшения пока строка не станет нужного размера. С переносами посложнее, но тоже решаемо.
 

baracuda

Client
Регистрация
19.06.2013
Сообщения
855
Благодарностей
294
Баллы
63
Как в этой либе не знаю, но в c# есть метод Graphics.MeasureString позволяющий получить размеры строки до её добавления.
В цикле меняешь FontSize в сторону уменьшения пока строка не станет нужного размера. С переносами посложнее, но тоже решаемо.
Ну пока вроде такую залипуху сделал, смотрю что и как гибко сделать. не идеал, но поиграться можно.

C#:
// Получаем пути к файлам и параметры из переменных проекта
string inputImagePath = project.Variables["InputImagePath"].Value; // Путь к изображению
string outputPath = project.Variables["SaveImagePath"].Value; // Куда сохранять результат
string inputFont = project.Variables["Inputfont"].Value; // Шрифт текста
string inputText = project.Variables["Inputtext"].Value; // Сам текст

// Основные параметры изображения
int width = 1000;  // Ширина итогового изображения
int height = 2000; // Высота итогового изображения

int reservedForImage = height / 2;  // Нижняя половина отводится под картинку
int textAreaHeight = height - reservedForImage;  // Верхняя область для текста

int fontSize = 120; // Начальный размер шрифта
int minFontSize = 50; // Минимально допустимый размер шрифта
int leftPadding = 20; // Отступ текста слева
int rightPadding = 20; // Отступ текста справа
int textTopPadding = 50; // Отступ текста сверху
MagickColor fontColor = new MagickColor("#FFFFFF"); // Цвет текста (белый)

// Процент затемнения (0% - нет затемнения, 100% - полностью черный экран)
int tintOpacity = 00;

using (MagickImage emptyImage = new MagickImage(new MagickColor("#508080"), width, height))
{
    // Настройки для текста
    MagickReadSettings readSettings = new MagickReadSettings
    {
        FillColor = fontColor, // Цвет шрифта
        BackgroundColor = MagickColors.Transparent, // Фон прозрачный
        Font = inputFont, // Шрифт текста
        Width = width - leftPadding - rightPadding, // Максимальная ширина текста с учетом отступов
        Height = textAreaHeight, // Высота области для текста
        FontPointsize = fontSize, // Начальный размер шрифта
        TextGravity = Gravity.North // Выравнивание по верхнему краю
    };

    // Функция проверки, помещается ли текст
    bool CanTextFit(string text, int fontSizeCheck)
    {
        readSettings.FontPointsize = fontSizeCheck;
        using (MagickImage caption = new MagickImage($"caption:{text}", readSettings))
        {
            return caption.Width <= readSettings.Width && caption.Height <= readSettings.Height;
        }
    }

    // Подбираем размер шрифта (уменьшаем, пока текст не поместится)
    while (!CanTextFit(inputText, fontSize) && fontSize > minFontSize)
    {
        fontSize--;
    }

    readSettings.FontPointsize = fontSize;

    // Генерируем изображение с текстом
    using (MagickImage caption = new MagickImage($"caption:{inputText}", readSettings))
    {
        int textX = leftPadding; // Горизонтальный отступ
        int textY = textTopPadding; // Отступ сверху

        emptyImage.Composite(caption, textX, textY, CompositeOperator.Over);
    }

    // Загружаем изображение и точно подгоняем его под нижнюю половину
    using (MagickImage inputImage = new MagickImage(inputImagePath))
    {
        inputImage.Resize(width, reservedForImage); // Масштабируем по ширине
        inputImage.Extent(width, reservedForImage, Gravity.Center); // Обрезаем, если нужно

        emptyImage.Composite(inputImage, 0, textAreaHeight, CompositeOperator.Over);
    }

    // Применяем тонировку ко всему изображению
    if (tintOpacity > 0)
    {
        byte alpha = (byte)(255 * (tintOpacity / 100.0)); // Перевод процентов в 0-255
        MagickColor overlayColor = new MagickColor(0, 0, 0, alpha); // Черный с прозрачностью

        using (MagickImage overlay = new MagickImage(overlayColor, width, height))
        {
            emptyImage.Composite(overlay, 0, 0, CompositeOperator.Over);
        }
    }

    // Сохраняем итоговое изображение
    emptyImage.Write(outputPath);
}
130128
 
  • Спасибо
Реакции: Astraport

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