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

dima2121

Client
Joined
Feb 9, 2020
Messages
146
Reaction score
16
Points
18
Кто пользовался шаблоном, подскажите пожалуйста, как можно добавить белую полосу размером 400 пикселей слева от картинки/фотографии ?
В какой код что нужно прописать ?
 

igoreff

Client
Joined
Feb 24, 2011
Messages
193
Reaction score
24
Points
18
А кто в курсе как вот такую штуку сюда прикрутить http://www.fmwconcepts.com/imagemagick/cartoon/index.php что то всё перерыл не могу понять как сделать? Или может кто подскажет как такое сделать другим методом?
 

radv

Client
Joined
May 11, 2015
Messages
3,837
Reaction score
2,046
Points
113
А кто в курсе как вот такую штуку сюда прикрутить
Что именно и куда хотите прикрутить? По ссылке просто документация с примерами использования
 

igoreff

Client
Joined
Feb 24, 2011
Messages
193
Reaction score
24
Points
18
Что именно и куда хотите прикрутить? По ссылке просто документация с примерами использования
Страницу надо ниже прокрутить, вот такой эффект нужен - Cartoon, типа зарисовка карандашом.
 

samsonnn

Client
Joined
Jun 2, 2015
Messages
1,858
Reaction score
1,580
Points
113

samsonnn

Client
Joined
Jun 2, 2015
Messages
1,858
Reaction score
1,580
Points
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
Joined
Sep 7, 2016
Messages
122
Reaction score
5
Points
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 фото. Параметры никакие не меняю.
 

Attachments

luserz

Client
Joined
Sep 7, 2016
Messages
122
Reaction score
5
Points
18
Еще забавная штука. Если я полностью закрашиваю фон прямоугольника белым, то он не меняет прозрачность, но если закрашиваю практически все кроме углов, то все ок.
 

Attachments

socora

Client
Joined
Nov 29, 2021
Messages
30
Reaction score
9
Points
8
Здравствуйте, кто то решил проблему с установкой нестандартных шрифтов при добавление текста ?? К примеру FontFamily помогло избавиться от проблемы 1-го и того же шрифта и теперь можно использовать пул шрифтов но только стандартных, новые шрифты ничерта не работают, так же может кто то смог поставить обновленную библиотеку Magick?? (последняя версия не работает ни при каких условиях, просит какие то новые пространства using, которых не найти)
 

jaka1

Client
Joined
Mar 10, 2015
Messages
44
Reaction score
14
Points
8
Здравствуйте, кто то решил проблему с установкой нестандартных шрифтов при добавление текста ?? К примеру FontFamily помогло избавиться от проблемы 1-го и того же шрифта и теперь можно использовать пул шрифтов но только стандартных, новые шрифты ничерта не работают, так же может кто то смог поставить обновленную библиотеку Magick?? (последняя версия не работает ни при каких условиях, просит какие то новые пространства using, которых не найти)
использую нестандартные шрифты, вообще не разу не видел проблем с этим. Опытным путем удалось выяснить, что можно использовать шрифт без установки, а указывать путь сразу к самому шрифту.
 

socora

Client
Joined
Nov 29, 2021
Messages
30
Reaction score
9
Points
8
использую нестандартные шрифты, вообще не разу не видел проблем с этим. Опытным путем удалось выяснить, что можно использовать шрифт без установки, а указывать путь сразу к самому шрифту.
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
Joined
Mar 10, 2015
Messages
44
Reaction score
14
Points
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
Joined
Nov 29, 2021
Messages
30
Reaction score
9
Points
8
а добавьте инф пожалуйста, как обновить библиотеку( ссылка на рабочую+ все пространства using)
 

jaka1

Client
Joined
Mar 10, 2015
Messages
44
Reaction score
14
Points
8
C#:
using ImageMagick;
using ImageMagick.Formats;
 

Attachments

  • Thank you
Reactions: Таксист

socora

Client
Joined
Nov 29, 2021
Messages
30
Reaction score
9
Points
8
спасибо, заработало но нужно добавить еще 1 dll стандартную!! Скрин ниже
 

Attachments

  • Thank you
Reactions: x_tonic

socora

Client
Joined
Nov 29, 2021
Messages
30
Reaction score
9
Points
8
Так же, чтобы заработал нужный шрифт, указываем директорию шрифта без Русских папок!!! "E:\BotDocuments\2015\шрифты\OCR-B 10 BT.ttf"-не верно!!! "E:\BotDocuments\OCR-B 10 BT.ttf"-верно!!
 

socora

Client
Joined
Nov 29, 2021
Messages
30
Reaction score
9
Points
8
подскажите, как записать текст произвольной волной-дугой C#
 

socora

Client
Joined
Nov 29, 2021
Messages
30
Reaction score
9
Points
8
Мне нужен C# код для размытия только краев изображения с возможностью регулировки уровня размытия либо размытие произвольной фигуры по координатам!!!
 

samsonnn

Client
Joined
Jun 2, 2015
Messages
1,858
Reaction score
1,580
Points
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
Чтоб у вас код завелся читаем - тык и тык
 
Last edited:

jenokizm

Новичок
Joined
Aug 4, 2023
Messages
1
Reaction score
0
Points
1
Всем привет, подскажите пример кода конвертации png в jpg файл?
 

kitkv

Client
Joined
Jul 26, 2021
Messages
19
Reaction score
1
Points
3
Доброго времени. Возможно кто-то сталкивался.
Два вопроса:
1.А как можно добавить тень именно к объекту на изображении, а не к всему изображению.
2.И можно ли как то автоматически менять размер шрифта добавляемого текста в зависимости от его длины
 

tleakduk

Client
Joined
Jul 24, 2017
Messages
48
Reaction score
1
Points
8
а есть образец как оставить на картинке только 1 цвет пикселя?
 

Astraport

Client
Joined
May 1, 2015
Messages
5,002
Reaction score
4,468
Points
113
а есть образец как оставить на картинке только 1 цвет пикселя?
Залить всё одним цветом?
 

tleakduk

Client
Joined
Jul 24, 2017
Messages
48
Reaction score
1
Points
8
Залить всё одним цветом?
можно попробовать и залить всё, пример с залить определенный пиксель я нашел а вот залить всё нет
 

Astraport

Client
Joined
May 1, 2015
Messages
5,002
Reaction score
4,468
Points
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
Joined
Jul 24, 2017
Messages
48
Reaction score
1
Points
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
Joined
Jul 24, 2017
Messages
48
Reaction score
1
Points
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
Joined
May 1, 2015
Messages
5,002
Reaction score
4,468
Points
113
Вам нужно разобраться в ваших желаниях и способах их формулирования. Один вопрос страннее предыдущего.
 

orka13

Client
Joined
May 7, 2015
Messages
2,180
Reaction score
2,191
Points
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);
    }
}
 
Last edited:

gad

Client
Joined
Sep 29, 2009
Messages
32
Reaction score
1
Points
8
подскажите пож-та как извлечь одно изображение из другого. Два слоя в одном объект в png c прозрачным фоном в другом сплошной фон, как вырезать первый из второго?
 

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)