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

  • Автор темы Автор темы samsonnn
  • Дата начала Дата начала
Кто пользовался шаблоном, подскажите пожалуйста, как можно добавить белую полосу размером 400 пикселей слева от картинки/фотографии ?
В какой код что нужно прописать ?
 
А кто в курсе как вот такую штуку сюда прикрутить http://www.fmwconcepts.com/imagemagick/cartoon/index.php что то всё перерыл не могу понять как сделать? Или может кто подскажет как такое сделать другим методом?
 
Что именно и куда хотите прикрутить? По ссылке просто документация с примерами использования
Страницу надо ниже прокрутить, вот такой эффект нужен - Cartoon, типа зарисовка карандашом.
 
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);
}
 
Здравствуйте! Подскажите, почему когда я накладываю водяной знак с картинкой, то он изменяет её прозрачность, но если я накладываю белый прямоугольный блок, то он не изменяет её прозрачность? Также заметил, что только фон 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 фото. Параметры никакие не меняю.
 

Вложения

  • Magick.NET.rar
    Magick.NET.rar
    25,6 MB · Просмотры: 289
  • Скриншот 26-05-2023 160739.jpg
    Скриншот 26-05-2023 160739.jpg
    62,9 KB · Просмотры: 232
  • Скриншот 26-05-2023 161029.jpg
    Скриншот 26-05-2023 161029.jpg
    55,7 KB · Просмотры: 209
Еще забавная штука. Если я полностью закрашиваю фон прямоугольника белым, то он не меняет прозрачность, но если закрашиваю практически все кроме углов, то все ок.
 

Вложения

  • Скриншот 26-05-2023 163031.jpg
    Скриншот 26-05-2023 163031.jpg
    62,4 KB · Просмотры: 227
Здравствуйте, кто то решил проблему с установкой нестандартных шрифтов при добавление текста ?? К примеру FontFamily помогло избавиться от проблемы 1-го и того же шрифта и теперь можно использовать пул шрифтов но только стандартных, новые шрифты ничерта не работают, так же может кто то смог поставить обновленную библиотеку Magick?? (последняя версия не работает ни при каких условиях, просит какие то новые пространства using, которых не найти)
 
Здравствуйте, кто то решил проблему с установкой нестандартных шрифтов при добавление текста ?? К примеру FontFamily помогло избавиться от проблемы 1-го и того же шрифта и теперь можно использовать пул шрифтов но только стандартных, новые шрифты ничерта не работают, так же может кто то смог поставить обновленную библиотеку Magick?? (последняя версия не работает ни при каких условиях, просит какие то новые пространства using, которых не найти)
использую нестандартные шрифты, вообще не разу не видел проблем с этим. Опытным путем удалось выяснить, что можно использовать шрифт без установки, а указывать путь сразу к самому шрифту.
 
использую нестандартные шрифты, вообще не разу не видел проблем с этим. Опытным путем удалось выяснить, что можно использовать шрифт без установки, а указывать путь сразу к самому шрифту.
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 шрифт
 
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
}
}
вот так у меня работает
 
а добавьте инф пожалуйста, как обновить библиотеку( ссылка на рабочую+ все пространства using)
 
C#:
Развернуть Свернуть Копировать
using ImageMagick;
using ImageMagick.Formats;
 

Вложения

  • Спасибо
Реакции: Таксист
спасибо, заработало но нужно добавить еще 1 dll стандартную!! Скрин ниже
 

Вложения

  • Screenshot_6.jpg
    Screenshot_6.jpg
    11,4 KB · Просмотры: 296
  • Спасибо
Реакции: x_tonic
Так же, чтобы заработал нужный шрифт, указываем директорию шрифта без Русских папок!!! "E:\BotDocuments\2015\шрифты\OCR-B 10 BT.ttf"-не верно!!! "E:\BotDocuments\OCR-B 10 BT.ttf"-верно!!
 
подскажите, как записать текст произвольной волной-дугой C#
 
Мне нужен C# код для размытия только краев изображения с возможностью регулировки уровня размытия либо размытие произвольной фигуры по координатам!!!
 
Текст произвольной волной

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
Чтоб у вас код завелся читаем - тык и тык
 
Последнее редактирование:
Всем привет, подскажите пример кода конвертации png в jpg файл?
 
Доброго времени. Возможно кто-то сталкивался.
Два вопроса:
1.А как можно добавить тень именно к объекту на изображении, а не к всему изображению.
2.И можно ли как то автоматически менять размер шрифта добавляемого текста в зависимости от его длины
 
а есть образец как оставить на картинке только 1 цвет пикселя?
 
Это решается без библиотек. Рисуете прямоугольник сверху нужного цвета и всё.
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");
 
Это решается без библиотек. Рисуете прямоугольник сверху нужного цвета и всё.
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 цвет пикселя?" все еще актуален.
 
извиняюсь, оказывается мне реально нужна заливка так как пиксель не уникалынй и всегда немного меняется
методом "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);
}
 
Вам нужно разобраться в ваших желаниях и способах их формулирования. Один вопрос страннее предыдущего.
 
Здравствуйте! Подскажите, почему когда я накладываю водяной знак с картинкой, то он изменяет её прозрачность, но если я накладываю белый прямоугольный блок, то он не изменяет её прозрачность? Также заметил, что только фон 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);
    }
}
 
Последнее редактирование:
подскажите пож-та как извлечь одно изображение из другого. Два слоя в одном объект в png c прозрачным фоном в другом сплошной фон, как вырезать первый из второго?
 

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