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

dima2121

Client
Регистрация
09.02.2020
Сообщения
106
Благодарностей
7
Баллы
18
Кто пользовался шаблоном, подскажите пожалуйста, как можно добавить белую полосу размером 400 пикселей слева от картинки/фотографии ?
В какой код что нужно прописать ?
 

igoreff

Client
Регистрация
24.02.2011
Сообщения
176
Благодарностей
20
Баллы
18
А кто в курсе как вот такую штуку сюда прикрутить http://www.fmwconcepts.com/imagemagick/cartoon/index.php что то всё перерыл не могу понять как сделать? Или может кто подскажет как такое сделать другим методом?
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 677
Благодарностей
1 860
Баллы
113

igoreff

Client
Регистрация
24.02.2011
Сообщения
176
Благодарностей
20
Баллы
18
Что именно и куда хотите прикрутить? По ссылке просто документация с примерами использования
Страницу надо ниже прокрутить, вот такой эффект нужен - Cartoon, типа зарисовка карандашом.
 

samsonnn

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

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 650
Благодарностей
1 318
Баллы
113
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);
}
 

luserz

Client
Регистрация
07.09.2016
Сообщения
114
Благодарностей
5
Баллы
18
Здравствуйте! Подскажите, почему когда я накладываю водяной знак с картинкой, то он изменяет её прозрачность, но если я накладываю белый прямоугольный блок, то он не изменяет её прозрачность? Также заметил, что только фон PNG изменяет, если накладываю JPG, то ничего не работает. Код использовал:

string InputImagePath = project.Variables["InputImagePath"].Value;
string WatermarkImagePath = project.Variables["WatermarkImagePath"].Value;
string SaveImagePath = project.Variables["SaveImagePath"].Value;

using (MagickImage image = new MagickImage(InputImagePath)){
using (MagickImage watermark = new MagickImage(WatermarkImagePath)){
watermark.Evaluate(Channels.Alpha, EvaluateOperator.Divide, 3);
image.Composite(watermark, Gravity.Center, CompositeOperator.Over);
image.Write(SaveImagePath);
}
}

Во вложении 2 фото. Параметры никакие не меняю.
 

Вложения

luserz

Client
Регистрация
07.09.2016
Сообщения
114
Благодарностей
5
Баллы
18
Еще забавная штука. Если я полностью закрашиваю фон прямоугольника белым, то он не меняет прозрачность, но если закрашиваю практически все кроме углов, то все ок.
 

Вложения

socora

Client
Регистрация
29.11.2021
Сообщения
29
Благодарностей
6
Баллы
3
Здравствуйте, кто то решил проблему с установкой нестандартных шрифтов при добавление текста ?? К примеру FontFamily помогло избавиться от проблемы 1-го и того же шрифта и теперь можно использовать пул шрифтов но только стандартных, новые шрифты ничерта не работают, так же может кто то смог поставить обновленную библиотеку Magick?? (последняя версия не работает ни при каких условиях, просит какие то новые пространства using, которых не найти)
 

jaka1

Client
Регистрация
10.03.2015
Сообщения
43
Благодарностей
14
Баллы
8
Здравствуйте, кто то решил проблему с установкой нестандартных шрифтов при добавление текста ?? К примеру FontFamily помогло избавиться от проблемы 1-го и того же шрифта и теперь можно использовать пул шрифтов но только стандартных, новые шрифты ничерта не работают, так же может кто то смог поставить обновленную библиотеку Magick?? (последняя версия не работает ни при каких условиях, просит какие то новые пространства using, которых не найти)
использую нестандартные шрифты, вообще не разу не видел проблем с этим. Опытным путем удалось выяснить, что можно использовать шрифт без установки, а указывать путь сразу к самому шрифту.
 

socora

Client
Регистрация
29.11.2021
Сообщения
29
Благодарностей
6
Баллы
3
использую нестандартные шрифты, вообще не разу не видел проблем с этим. Опытным путем удалось выяснить, что можно использовать шрифт без установки, а указывать путь сразу к самому шрифту.
string InputImagePath = project.Variables["InputImagePath"].Value;
string SaveImagePath = project.Variables["SaveImagePath"].Value;

// Загрузка изображения с помощью пути InputImagePath
using (MagickImage image = new MagickImage(InputImagePath))
{
// Создание настроек для чтения изображения
MagickReadSettings readSettings = new MagickReadSettings
{
FillColor = new MagickColor("#000000"), // Цвет заполнения
BackgroundColor = MagickColors.Transparent, // Цвет фона
Width = 1300, // Ширина изображения
Height = 800, // Высота изображения
FontStyle = FontStyleType.Normal // Стиль шрифта
};

readSettings.FontFamily = @""; // путь к шрифту

image.Alpha(AlphaOption.Opaque); // Установка альфа-канала в непрозрачный режим

// Создание метки с текстом "IDMEX5118884166<<8989525221114" и настройками readSettings
using (MagickImage label = new MagickImage("label:IMEX5118884166<<8989525221114", readSettings))
{
label.Blur(0, 1.5); // Применение размытия к метке

// Композиция метки с изображением на координатах (100, 500) с использованием оператора Over
image.Composite(label, 100, 500, CompositeOperator.Over);

image.Rotate(0); // Поворот изображения на угол 0 градусов

image.Write(SaveImagePath); // Сохранение изображения по указанному пути SaveImagePath
}
}
к сожалению указывал путь, он берет по умолчанию arial шрифт
 

jaka1

Client
Регистрация
10.03.2015
Сообщения
43
Благодарностей
14
Баллы
8
C#:
string InputImagePath = @"D:\11111.png";
string SaveImagePath = @"D:\11211.png";

// Загрузка изображения с помощью пути InputImagePath
using (MagickImage image = new MagickImage(InputImagePath))
{
// Создание настроек для чтения изображения
MagickReadSettings readSettings = new MagickReadSettings
{
FillColor = new MagickColor("#000000"), // Цвет заполнения
BackgroundColor = MagickColors.Transparent, // Цвет фона
Width = 1300, // Ширина изображения
Height = 800, // Высота изображения
FontStyle = FontStyleType.Normal, // Стиль шрифта
Font = @"D:\Rose Velt.ttf"
};

readSettings.FontFamily = @""; // путь к шрифту

image.Alpha(AlphaOption.Opaque); // Установка альфа-канала в непрозрачный режим

// Создание метки с текстом "IDMEX5118884166<<8989525221114" и настройками readSettings
using (MagickImage label = new MagickImage("label:IMEX5118884166<<8989525221114", readSettings))
{
label.Blur(0, 1.5); // Применение размытия к метке

// Композиция метки с изображением на координатах (100, 500) с использованием оператора Over
image.Composite(label, 10, 50, CompositeOperator.Over);

image.Rotate(0); // Поворот изображения на угол 0 градусов

image.Write(SaveImagePath); // Сохранение изображения по указанному пути SaveImagePath
}
}
вот так у меня работает
 

socora

Client
Регистрация
29.11.2021
Сообщения
29
Благодарностей
6
Баллы
3
а добавьте инф пожалуйста, как обновить библиотеку( ссылка на рабочую+ все пространства using)
 

jaka1

Client
Регистрация
10.03.2015
Сообщения
43
Благодарностей
14
Баллы
8
C#:
using ImageMagick;
using ImageMagick.Formats;
 

Вложения

  • Спасибо
Реакции: Таксист

socora

Client
Регистрация
29.11.2021
Сообщения
29
Благодарностей
6
Баллы
3
спасибо, заработало но нужно добавить еще 1 dll стандартную!! Скрин ниже
 

Вложения

socora

Client
Регистрация
29.11.2021
Сообщения
29
Благодарностей
6
Баллы
3
Так же, чтобы заработал нужный шрифт, указываем директорию шрифта без Русских папок!!! "E:\BotDocuments\2015\шрифты\OCR-B 10 BT.ttf"-не верно!!! "E:\BotDocuments\OCR-B 10 BT.ttf"-верно!!
 

socora

Client
Регистрация
29.11.2021
Сообщения
29
Благодарностей
6
Баллы
3
подскажите, как записать текст произвольной волной-дугой C#
 

socora

Client
Регистрация
29.11.2021
Сообщения
29
Благодарностей
6
Баллы
3
Мне нужен C# код для размытия только краев изображения с возможностью регулировки уровня размытия либо размытие произвольной фигуры по координатам!!!
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 650
Благодарностей
1 318
Баллы
113
Текст произвольной волной

109626
109627


C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению .jpg
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение .webp
using (MagickImage image = new MagickImage(InputImagePath)){
IDrawables<float> drawables = new Drawables().FontPointSize(22) // Размер
                                             .Font("Arial") // Шрифт
                                             .FillColor(MagickColors.Black); // Цвет
string text = "Тут ваш какой то текст"; // Ваш текст
int spacing = 15; // расстояние между символами
double amplitude = 7; // амплитуда
double frequency = 3; // частота
double offset = 0; // компенсация
int startX = 40; // начало текста слева
int startY = 200; // расположение текста по высоте
    
    for (int i = 0; i < text.Length; i++){
        double x = startX + i * spacing;
        double y = startY + amplitude * Math.Sin(2 * Math.PI * frequency * i / text.Length + offset);
drawables.Text(x, y, text[i].ToString());
     }
image.Draw(drawables);
image.Write(SaveImagePath);
}
Тестировал на Magick.NET-Q16-HDRI-AnyCPU
Чтоб у вас код завелся читаем - тык и тык
 
Последнее редактирование:

jenokizm

Новичок
Регистрация
04.08.2023
Сообщения
1
Благодарностей
0
Баллы
1
Всем привет, подскажите пример кода конвертации png в jpg файл?
 

kitkv

Client
Регистрация
26.07.2021
Сообщения
17
Благодарностей
1
Баллы
3
Доброго времени. Возможно кто-то сталкивался.
Два вопроса:
1.А как можно добавить тень именно к объекту на изображении, а не к всему изображению.
2.И можно ли как то автоматически менять размер шрифта добавляемого текста в зависимости от его длины
 

tleakduk

Client
Регистрация
24.07.2017
Сообщения
48
Благодарностей
1
Баллы
8
а есть образец как оставить на картинке только 1 цвет пикселя?
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 943
Благодарностей
4 336
Баллы
113

tleakduk

Client
Регистрация
24.07.2017
Сообщения
48
Благодарностей
1
Баллы
8

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 943
Благодарностей
4 336
Баллы
113
Это решается без библиотек. Рисуете прямоугольник сверху нужного цвета и всё.
C#:
Bitmap bitmap = new Bitmap(1000, 800, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Graphics graphics = Graphics.FromImage(bitmap);
Pen pen = new Pen(Color.FromKnownColor(KnownColor.Blue), 0);
graphics.DrawRectangle(pen, 0, 0, 1000, 800);
bitmap.Save("DrawRectangle.png");
 

tleakduk

Client
Регистрация
24.07.2017
Сообщения
48
Благодарностей
1
Баллы
8
Это решается без библиотек. Рисуете прямоугольник сверху нужного цвета и всё.
C#:
Bitmap bitmap = new Bitmap(1000, 800, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Graphics graphics = Graphics.FromImage(bitmap);
Pen pen = new Pen(Color.FromKnownColor(KnownColor.Blue), 0);
graphics.DrawRectangle(pen, 0, 0, 1000, 800);
bitmap.Save("DrawRectangle.png");
эммм, наверное не подойдет. вопрос - "а есть образец как оставить на картинке только 1 цвет пикселя?" все еще актуален.
 

tleakduk

Client
Регистрация
24.07.2017
Сообщения
48
Благодарностей
1
Баллы
8
извиняюсь, оказывается мне реально нужна заливка так как пиксель не уникалынй и всегда немного меняется
методом "FloodFill - Заливка" я не совсем понимаю как менять на мои параметры
C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
    image.FloodFill(MagickColors.Green, 50, 70);
    image.Write(SaveImagePath);
}
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 943
Благодарностей
4 336
Баллы
113
Вам нужно разобраться в ваших желаниях и способах их формулирования. Один вопрос страннее предыдущего.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 165
Благодарностей
2 167
Баллы
113
Здравствуйте! Подскажите, почему когда я накладываю водяной знак с картинкой, то он изменяет её прозрачность, но если я накладываю белый прямоугольный блок, то он не изменяет её прозрачность? Также заметил, что только фон PNG изменяет, если накладываю JPG, то ничего не работает. Код использовал:

string InputImagePath = project.Variables["InputImagePath"].Value;
string WatermarkImagePath = project.Variables["WatermarkImagePath"].Value;
string SaveImagePath = project.Variables["SaveImagePath"].Value;

using (MagickImage image = new MagickImage(InputImagePath)){
using (MagickImage watermark = new MagickImage(WatermarkImagePath)){
watermark.Evaluate(Channels.Alpha, EvaluateOperator.Divide, 3);
image.Composite(watermark, Gravity.Center, CompositeOperator.Over);
image.Write(SaveImagePath);
}
}

Во вложении 2 фото. Параметры никакие не меняю.
Тоже столкнулся с тем что если на картинке PNG есть прозрачные участки, то ее общую полупрозрачность меняет, а иначе нет. Сравнил две картинке в редакторе и увидел что у первой "32bit", а у второй "24bit". Начал гуглить в чем разница, и нашел что там где больше бит то есть еще доп канал Alpha . Нашел даже онлайн конвертеры [PNG 24bit > 32bit]. Можно конечно методом через попу прогнать наши картинки до 32 бит, но лучше по феншую на лету все подправить:
Дальше гуглим: C# MagickImage add alpha channel
И понимаем что нам не хватает сразу после подключения картинки (watermark) добавить ей этот канал, тогда можно даже jpg использовать для наложения полупрозрачного:
watermark.Alpha(AlphaOption.Set);
C#:
string InputImagePath = project.Variables["InputImagePath"].Value;
string WatermarkImagePath = project.Variables["WatermarkImagePath"].Value;
string SaveImagePath =  project.Variables["SaveImagePath"].Value;

using (MagickImage image = new MagickImage(InputImagePath)){
    using (MagickImage watermark = new MagickImage(WatermarkImagePath)){
        watermark.Alpha(AlphaOption.Set);
        watermark.Evaluate(Channels.Alpha, EvaluateOperator.Divide, 8);
        image.Composite(watermark, Gravity.Center, CompositeOperator.Over);
        image.Write(SaveImagePath);
    }
}
 
Последнее редактирование:

gad

Client
Регистрация
29.09.2009
Сообщения
32
Благодарностей
1
Баллы
8
подскажите пож-та как извлечь одно изображение из другого. Два слоя в одном объект в png c прозрачным фоном в другом сплошной фон, как вырезать первый из второго?
 

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