cherus09
Client
- Joined
- Oct 10, 2016
- Messages
- 172
- Reaction score
- 14
- Points
- 18
MagickImage image = new MagickImage(fileName);
ushort[] pixelValues = image.GetPixels().GetValues();
var settings = new MagickReadSettings
{
BackgroundColor = MagickColors.White,
FillColor = new MagickColor("#000000"),
Font = "Grown",
Width = 1536,
Height = 864,
TextGravity = Gravity.Center, // -gravity center
};
var image = new MagickImage("caption:diman", settings);
image.Write("output.jpg");
Сначала я создаю пустой файл нужного мне размера этим кодомПокажите код
Вот рабочий пример:
C#:var settings = new MagickReadSettings { BackgroundColor = MagickColors.White, FillColor = new MagickColor("#000000"), Font = "Grown", Width = 1536, Height = 864, TextGravity = Gravity.Center, // -gravity center }; var image = new MagickImage("caption:diman", settings); image.Write("output.jpg");
int Width = Convert.ToInt32(project.Variables["Width"].Value);
int Height = Convert.ToInt32(project.Variables["Height_uv"].Value);
string SaveImagePath = project.Variables["temp"].Value;
using (MagickImage image = new MagickImage(MagickColors.White, (Width), (Height))){
image.Format = MagickFormat.Png;
image.Alpha(AlphaOption.Set);
image.Write(SaveImagePath);
}
string InputImagePath = project.Variables["temp"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["temp2"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
string font = "Arial"; // Шрифт текста, по желанию можно подставить переменную project.Variables["font"].Value; вместо "Arial";
int fontSize = 28; // Размер шрифта, по желанию можно подставить переменную int.Parse(project.Variables["fontSize"].Value); вместо 28;
using(Image image = Image.FromFile(InputImagePath)){
using(Graphics graphics = Graphics.FromImage(image)){
graphics.DrawString(project.Variables["text"].Value, // В переменной text находится текст который нужно наложить на изображение
new Font(font, fontSize, FontStyle.Regular, GraphicsUnit.World),
new SolidBrush(Color.Black), // Цвет текста
new RectangleF(10, 10, image.Width, image.Height)); // текст сверху, 10, 10 это отступ слева и сверху
//new RectangleF(10, image.Height / 2 - fontSize, image.Width, image.Height)); //если нужен текст по центру, раскоментировать, а верхнюю закоментировать
image.Save(SaveImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
MagickFormat fmt = MagickFormat.Png24;
using (MagickImage image = new MagickImage(MagickColors.White, Width, Height)){
image.Format = MagickFormat.Png;
image.Alpha(AlphaOption.Set);
image.Write(SaveImagePath,fmt);
}
Большое спасибо. То что нужно.Но мой пример лаконичнее и понятнее, чем Ваш. Я бы переделал на Вашем месте.
привер, как нужно указывать путь к изображению ? Оно должно быть на компютере? Типа путь а файлу на пк указывать или что?Теория, обзор и примеры методов (фильтров) I
В библиотеке Magick.NET я насчитал более 50 методов для работы с изображениями, давайте более подробно рассмотрим некоторые из их:
1. AutoGamma - Авто Гамма
Данный метод принимает следующие параметры:
View attachment 45787
View attachment 45789
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.AutoGamma(); image.Write(SaveImagePath); }
View attachment 45790 View attachment 45791
2. BitDepth - Бит глубина
Данный метод принимает следующие параметры:
View attachment 45792
View attachment 45793
View attachment 45794
View attachment 45795
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.BitDepth(2); image.Write(SaveImagePath); }
View attachment 45796 View attachment 45797
3. BlueShift - Синее смещение
Данный метод принимает следующие параметры:
View attachment 45798
View attachment 45799
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.BlueShift(1); image.Write(SaveImagePath); }
View attachment 45800 View attachment 45801
4. Blur - Расплывшиеся очертания
Данный метод принимает следующие параметры:
View attachment 45781
View attachment 45782
View attachment 45783
View attachment 45784
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Blur(3, 5); image.Write(SaveImagePath); }
View attachment 45785 View attachment 45786
5. CannyEdge - Осторожный край
Данный метод принимает следующие параметры:
View attachment 45802
View attachment 45803
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.CannyEdge(1.0, 3.0, new Percentage(4), new Percentage(4)); image.Write(SaveImagePath); }
View attachment 45804 View attachment 45805
6. Charcoal - Древесный уголь
Данный метод принимает следующие параметры:
View attachment 45806
View attachment 45807
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Charcoal(1, 3); image.Write(SaveImagePath); }
View attachment 45808 View attachment 45809
7. ContrastStretch - Контраст Стретч
Данный метод принимает следующие параметры:
View attachment 45810
View attachment 45811
View attachment 45812
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.ContrastStretch(new Percentage(10)); image.Write(SaveImagePath); }
View attachment 45813 View attachment 45814
8. CycleColormap - Цикл Цветовая карта
Данный метод принимает следующие параметры:
View attachment 45815
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.CycleColormap(5); image.Write(SaveImagePath); }
View attachment 45816 View attachment 45817
9. Edge - Край
Данный метод принимает следующие параметры:
View attachment 45819
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Edge(2); image.Write(SaveImagePath); }
View attachment 45820 View attachment 45821
10. Emboss - Выбивать
Данный метод принимает следующие параметры:
View attachment 45822
View attachment 45823
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Emboss(1, 2); image.Write(SaveImagePath); }
View attachment 45824 View attachment 45825
11. Equalize - Выровнять
Данный метод не принимает параметров:
View attachment 45826
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Equalize(); image.Write(SaveImagePath); }
View attachment 45827 View attachment 45828
12. FloodFill - Заливка
Данный метод принимает следующие параметры:
View attachment 45829
View attachment 45830
View attachment 45831
View attachment 45832
View attachment 45833
View attachment 45834
View attachment 45835
View attachment 45836
View attachment 45837
Пользоваться так:
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); }
View attachment 45839 View attachment 45840
13. Flop - Провал (Зеркальное отображение)
Данный метод не принимает параметров:
View attachment 45841
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Flop(); image.Write(SaveImagePath); }
View attachment 45842 View attachment 45843
14. GammaCorrect - Гамма Коррект
Данный метод принимает следующие параметры:
View attachment 45844
View attachment 45845
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.GammaCorrect(3); image.Write(SaveImagePath); }
View attachment 45846 View attachment 45847
15. GaussianBlur - Гауссово размытие
Данный метод принимает следующие параметры:
View attachment 45848
View attachment 45849
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.GaussianBlur(3, 6); image.Write(SaveImagePath); }
View attachment 45850 View attachment 45851
16. Grayscale - Оттенки серого
Данный метод принимает следующие параметры:
View attachment 45852
View attachment 45853
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Grayscale(); image.Write(SaveImagePath); }
View attachment 45854 View attachment 45855
17. LocalContrast - Местный контраст
Данный метод принимает следующие параметры:
View attachment 45857
View attachment 45858
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.LocalContrast(3, new Percentage(15)); image.Write(SaveImagePath); }
View attachment 45859 View attachment 45860
18. MedianFilter - Медианный фильтр
Данный метод принимает следующие параметры:
View attachment 45861
View attachment 45862
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.MedianFilter(5); image.Write(SaveImagePath); }
View attachment 45863 View attachment 45864
19. Modulate - Модуляция
Данный метод принимает следующие параметры:
View attachment 45865
View attachment 45866
View attachment 45867
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Modulate(new Percentage(25)); image.Write(SaveImagePath); }
View attachment 45868 View attachment 45869
20. MotionBlur - Размытость
Данный метод принимает следующие параметры:
View attachment 45870
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.MotionBlur(2.2, 3.5, 2.4); image.Write(SaveImagePath); }
View attachment 45871 View attachment 45872
21. Negate - Отрицание (инвертирование)
Данный метод принимает следующие параметры:
View attachment 45873
View attachment 45874
View attachment 45875
View attachment 45876
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Negate(); image.Write(SaveImagePath); }
View attachment 45877 View attachment 45878
22. Normalize - Нормализовать
Данный метод не принимает параметров:
View attachment 45879
Пользоваться так:
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Normalize(); image.Write(SaveImagePath); }
View attachment 45880 View attachment 45881
Смотрите продолжение во второй части...
Да, нужно указывать путь к файлу на ПКпривер, как нужно указывать путь к изображению ? Оно должно быть на компютере? Типа путь а файлу на пк указывать или что?
Понял, спасибо)Да, нужно указывать путь к файлу на ПК
C:\Users\Administrator\Desktop\file.jpg
не подскажешь, а как в зеннопостере допустим сохранять картинки с браузера на пк?Да, нужно указывать путь к файлу на ПК
C:\Users\Administrator\Desktop\file.jpg
уже разобрался, спасибоне подскажешь, а как в зеннопостере допустим сохранять картинки с браузера на пк?
привет, не подскажешь где можно скачать даную библеотеку?View attachment 45658
Общая информация
ImageMagick - это мощная библиотека для работы с изображениями, которая поддерживает более 100 основных форматов файлов (не включая подформаты). С Magick.NET вы можете использовать ImageMagick в своем приложении C # / VB.NET / .NET Core, не устанавливая ImageMagick на свой сервер или компьютер.
Библиотека Magick.NET имеет отличие в x86 или x64 разрядности.
View attachment 45661
Какую скачать Q8, Q16 или Q16-HDRI?
Версия Q8 является рекомендуемой версией. Версии с Q8 в названии имеют компонент 8 бит на пиксель (например, 8-битный красный, 8-битный зеленый и т. д.). Тогда как Q16 - компонент 16 бит на пиксель. Версия Q16 позволяет вам читать или записывать 16-битные изображения без потери точности, но требует вдвое больше ресурсов, чем версия Q8. Версия Q16-HDRI использует вдвое больше памяти, чем Q16. Он более точен, потому что использует плавающую точку (32-битный компонент) и допускает пиксели вне границ (меньше 0 и больше 65535). Если вам нужно читать / записывать изображения лучшего качества, используйте вместо этого версию Q16.
AnyCPU
Версия Magick.NET для AnyCPU позволяет использовать ваше приложение в 32-разрядной или 64-разрядной среде. Когда используется один из классов в библиотеке, он обнаружит, является ли пул приложений 32- или 64-разрядным. Затем он будет читать версию dll для x86 или x64 из встроенного ресурса. Этот ресурс записывается во временный каталог для улучшения времени запуска при следующем его использовании.
Для себя я выбрал Magick.NET-Q8-AnyCPU.dll так же пробовал Magick.NET-Q16-AnyCPU.dll все отлично работает.
Заметил единственный недостаток, при первом запуске, код обрабатывается пару секунд, потом все выполняется мгновенно за доли секунды, думаю это связано с тем, что в начале идет определение x86 или x64 системы. Вы же можете попробовать другие варианты, на ваш выбор.
Подключение библиотеки Magick.NET
Тут не чего сложного, все как всегда, а для тех кто не в курсе, как подключить, читаем ниже:
1. Скопируйте скаченную библиотеку в папку ExternalAssemblies которая находится:
2. В своем проекте, внизу где списки, таблицы, жмем + и выбираем добавить ссылки из GACCode:C:\Program Files\ZennoLab\RU\ZennoPoster Pro\5.39.0.0\Progs\ExternalAssemblies
View attachment 45773
В появившемся окошке жмем добавить:
View attachment 45774
Далее жмем обзор:
View attachment 45775
Переходим в папку ExternalAssemblies и выбираем библиотеку в данном случае Magick.NET-Q8-AnyCPU.dll и жмем открыть.
View attachment 45776
После добавления, в окне ссылки из GAC появится библиотека
View attachment 45777
3. Теперь осталось подключить директивы using.
В своем проекте, внизу где списки, таблицы, жмем + и выбираем добавить директивы using и общий код
View attachment 45778
В открывшимся окне переходим во вкладку Директивы Using и в поле ниже вставляем, и закрываем это окно.
View attachment 45780C#:using ImageMagick; using ImageMagick.Configuration; using ImageMagick.Defines; using ImageMagick.ImageOptimizers;
Если вы все делали по шагово, так как тут описано, значит вы правильно подключили библиотеку Magick.NET с чем я вас и поздравляю)
а можно как то pdf конвертировать в картинку? в гугле искал решение, но при использовании кода оттуда выдает ошибкуконвертировать pdf файлы
поиск рулита можно как то pdf конвертировать в картинку? в гугле искал решение, но при использовании кода оттуда выдает ошибку
видел, еще я в той теме же этот вопрос и задавал, охота через ImageMagick а не стороннею программупоиск рулит
видел, еще я в той теме же этот вопрос и задавал, охота через ImageMagick а не стороннею программу
пробовал, тоже не получается, возможно у меня руки не оттуда растут, наверно пора уже C# начать учить что бы при работе с кодом не зависатьПробовал?
Практика (полезняшки)
Изображение в виде кнопки
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ using (MagickImage copyImg = new MagickImage(image.Clone())){ copyImg.Colorize(MagickColors.Gray, new Percentage(100)); copyImg.Raise(5); copyImg.Normalize(); copyImg.Blur(0, 5); image.Compose = CompositeOperator.HardLight; image.Composite(copyImg, CompositeOperator.Modulate); image.Write(SaveImagePath); } }
View attachment 46120 View attachment 46121
View attachment 46122 View attachment 46123
View attachment 46124 View attachment 46125
Круглое изображение
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Format = MagickFormat.Png; image.Alpha(AlphaOption.Set); using (MagickImage copy = new MagickImage(image.Clone())){ copy.Distort(DistortMethod.DePolar, 0); copy.VirtualPixelMethod = VirtualPixelMethod.HorizontalTile; copy.BackgroundColor = MagickColors.None; copy.Distort(DistortMethod.Polar, 0); image.Compose = CompositeOperator.DstIn; image.Composite(copy, CompositeOperator.CopyAlpha); image.Write(SaveImagePath); } }
View attachment 46114 View attachment 46115
View attachment 46116 View attachment 46117
View attachment 46118 View attachment 46119
Мягкие края, круглого, овального изображения
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Format = MagickFormat.Png; image.Alpha(AlphaOption.Set); using (MagickImage copy = new MagickImage(image.Clone())){ copy.BackgroundColor = MagickColors.None; copy.Vignette(0,4,0,0); image.Composite(copy, CompositeOperator.CopyAlpha); image.Write(SaveImagePath); } }
View attachment 46126 View attachment 46127
View attachment 46128 View attachment 46129
View attachment 46136 View attachment 46137
Заменить белый фон на прозрачный
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Format = MagickFormat.Png; image.Alpha(AlphaOption.Set); image.ColorFuzz = new Percentage(10); image.Opaque(MagickColors.White, MagickColor.FromRgba(0, 0, 0, 0)); image.Write(SaveImagePath); }
View attachment 46479 View attachment 46480
Наложение водяного знака на изображение
В переменной InputImagePath указать путь к изображениюC#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string WatermarkImagePath = project.Variables["WatermarkImagePath"].Value; // В переменной WatermarkImagePath указать путь к изображению которое нужно наложить string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ using (MagickImage watermark = new MagickImage(WatermarkImagePath)){ image.Composite(watermark, Gravity.Southeast, CompositeOperator.Over); watermark.Evaluate(Channels.Alpha, EvaluateOperator.Divide, 5); image.Composite(watermark, 50, 50, CompositeOperator.Over); image.Write(SaveImagePath); } }
View attachment 46173
В переменной WatermarkImagePath указать путь к изображению которое нужно наложить
View attachment 46175
В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
View attachment 46176
в коде можно выбрать место расположение водяного знака на изображении, ставим точку, всплывет окошечко, выбираем.
View attachment 46177
Так же в 7-й строке, показано на скриншоте выше, можно регулировать прозрачность, на данный момент она 5. Еще можно в 8 - й строке менять параметры 50, 50, тем самым регулируем расположение прозрачного знака на изображении.
Свой текст на изображении
C#:string InputImagePath = project.Variables["InputImagePath"].Value; string SaveImagePath = project.Variables["SaveImagePath"].Value; using (MagickImage image = new MagickImage(InputImagePath)){ MagickReadSettings readSettings = new MagickReadSettings{ FillColor = MagickColors.Blue, // цвет текста BackgroundColor = MagickColors.Transparent, // фон текста Font = "Arial", // Шрифт текста (только те, что установлены в Windows) Width = 350, // Ширина текста Height = 48 }; // Высота текста image.Alpha(AlphaOption.Opaque); using (MagickImage label = new MagickImage("label:Тут какой то текст", readSettings)){ image.Composite(label, 200, 100, CompositeOperator.Over); // расположение текста на картинке 200 слева, 100 сверху image.Write(SaveImagePath); } }
View attachment 46527
Сравниваем два изображения и получаем разницу
В переменной FirstImagePath указать путь к первому изображениюC#:string FirstImagePath = project.Variables["FirstImagePath"].Value; // В переменной FirstImagePath указать путь к первому изображению string SecondImagePath = project.Variables["SecondImagePath"].Value; // В переменной SecondImagePath указать путь ко второму изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage firstImage = new MagickImage(FirstImagePath)){ using (MagickImage secondImage = new MagickImage(SecondImagePath)){ using (MagickImage resultImage = new MagickImage()){ CompareSettings compareSettings = new CompareSettings(){ HighlightColor = MagickColors.Red, LowlightColor = MagickColors.White, Metric = ErrorMetric.Absolute }; firstImage.ColorFuzz = new Percentage(5); firstImage.Compare(secondImage, compareSettings, resultImage); resultImage.Write(SaveImagePath); } } }
View attachment 46180
В переменной SecondImagePath указать путь ко второму изображению
View attachment 46181
В переменной SaveImagePath указать путь куда сохраняем обработанное изображение. В результате нам показывает то, чего нету на втором изображении, то есть разницу)
View attachment 46182
Картинку в Base64
Это может быть полезно при работе с капчами, чтоб изображение не сохранять на диск после обработки фильтрами, а сразу конвертировать в base64, и отправить на кап монстр
В переменной InputImagePath указать путь к изображениюC#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению using (MagickImage image = new MagickImage(InputImagePath)){ string Base64 = image.ToBase64(); project.Variables["Base64"].Value = Base64; }
View attachment 46199
View attachment 46202
Информация о картинке (формат, размер, битность, цветность)
Кодом ниже, можно получить краткую информацию о изображении
В переменной InputImagePath указать путь к изображениюC#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению using (MagickImage image = new MagickImage(InputImagePath)){ project.Variables["InfoImage"].Value = image.ToString(); }
View attachment 46206
View attachment 46208
Получить файл с координатами и цветом пикселей
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveFilePath = project.Variables["SaveFilePath"].Value; // В переменной SaveFilePath указать путь к файлу, с его названием и он будет создан сам using (MagickImage image = new MagickImage(InputImagePath)){ image.Write(SaveFilePath); }
View attachment 46211
В файлике мы увидим следующее: общее количество пикселей, которое на изображении, и информацию про каждый пиксель, его координаты расположения на изображении и цвет
View attachment 46212
Формат .jpg в формат .png
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению с форматом .jpg string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение с форматом .png using (MagickImage image = new MagickImage(InputImagePath)){ image.Scale(new Percentage(100)); // качество изображения в процентах image.Write(SaveImagePath); }
Получить размер изображения
В переменной Size появится размер изображения.C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению using (MagickImage image = new MagickImage(InputImagePath)){ int Width = image.Width; int Height = image.Height; project.Variables["Size"].Value = Width.ToString() + "x" + Height.ToString(); }
Доминирующий цвет на изображении
Получим доминирующий цвет этого изображенияC#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению using (MagickImage image = new MagickImage(InputImagePath)){ Dictionary<MagickColor, int> dict = image.Histogram(); var keyOfMaxValue = dict.Aggregate((x, y) => x.Value > y.Value ? x : y).Key; Color c = keyOfMaxValue.ToColor(); string hex = "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2"); string rgb = c.R.ToString() + ", " + c.G.ToString() + ", " + c.B.ToString(); project.Variables["HexColor"].Value = hex; project.Variables["ColorRGB"].Value = rgb; project.SendInfoToLog("", "ColorRGB: " + rgb + " - HexColor: " + hex, true); }
View attachment 46218
В переменной HexColor появится значение цвета в hex, а в переменной ColorRGB появится значение цвета в rgb
View attachment 46219
посмотрим в гугле:
View attachment 46221
Действительно, на фоне (задний с лева и нижний план изображения) больше темного чем светлого.
Практика (работа с капчей)
Это не это?Делаем капчу черно-белой
Есть два способа сделать изображение капчи черно-белым:
Первый способ
Monochrome, специально капчи выискивать не буду, покажу на примере тех что у меня есть, решил совсем немного затронуть эту тему, чтоб было понимание того, как сделать капчу черно-белой)
View attachment 46222 View attachment 46223 View attachment 46224
Если просто применить монохром, то они будут такие:
View attachment 46225 View attachment 46226 View attachment 46227
Но как мы с вами помним, у нас есть инвертирующий фильтр, метод Negate(), давайте им и воспользуемся
View attachment 46228 View attachment 46229 View attachment 46230
Как видим мы добились того чего хотели) Это простые капчи, они без шумов, а так для каждой нужен индивидуальный подход, и свои фильтры с настройками.
Второй способC#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Format = MagickFormat.Png; image.ColorType = ColorType.Bilevel; image.Negate(); image.Write(SaveImagePath); }
С помощью фильтра Threshold / Порог
Но тут уже для первой капчи image.Threshold(new Percentage(45));C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (MagickImage image = new MagickImage(InputImagePath)){ image.Format = MagickFormat.Png; image.Threshold(new Percentage(70)); image.Negate(); image.Write(SaveImagePath); // сохраняем в .png }
а для остальных двух image.Threshold(new Percentage(70));
Капча клавиши
View attachment 46233 View attachment 46234 View attachment 46235
Задача избавится от самых клавиш, чтоб остались только числа, приступим
1. Воспользуемся фильтром Threshold(new Percentage(95));
View attachment 46236 View attachment 46237 View attachment 46238
2. Воспользуемся фильтром заливки FloodFill(MagickColors.Black, 0, 0); зальем черным цветом
View attachment 46239 View attachment 46240 View attachment 46241
3. Тот же самый фильтр FloodFill(MagickColors.White, 0, 0); только зальем белым цветом
View attachment 46242 View attachment 46244 View attachment 46245
Действительно произошла магия, не даром название библиотеки Magick, мы добились желаемого результата, теперь капмонстру куда легче стало распознавать капчу)
Если процент разгадывания не устраивает, хотелось бы еще повысить? Как вариант можно увеличить изображение в 2 а то и в 3 раза с помощью метода Sample(new Percentage(200)); 200 - в 2 раза, 300 - в 3 раза. Так же еще можно воспользоваться методом сглаживания Blur(1, 3); и с помощью метода Trim(); обрезать до черных пикселей. Давайте ради любопытства сделаем это)C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (ImageMagick.MagickImage image = new ImageMagick.MagickImage(InputImagePath)){ image.Threshold(new ImageMagick.Percentage(95)); image.FloodFill(MagickColors.Black, 0, 0); image.FloodFill(MagickColors.White, 0, 0); image.Write(SaveImagePath); }
View attachment 46248
View attachment 46249
View attachment 46250
Как видите, добавляя метод за методом, происходит магия) Не обязательно сохранять изображение после каждого применения фильтра. Можно сразу применить все и потом сохранить, либо конвертировать в base64 и отправить на кап монстр.C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение using (ImageMagick.MagickImage image = new ImageMagick.MagickImage(InputImagePath)){ image.Threshold(new ImageMagick.Percentage(95)); image.FloodFill(MagickColors.Black, 0, 0); image.FloodFill(MagickColors.White, 0, 0); image.Trim(); image.Blur(1, 3); image.Write(SaveImagePath); }
https://csharpdoc.hotexamples.com/ru/namespace/ImageMagick
Официальный форум(на английском языке) Magick.NET - тык
Официальный сайт(на английском языке) - тык
Github - тык
P.S Документации по Magik.NET C# в интернете нету, я облазил все вдоль и поперек, не нашел, все делал своими силами![]()