cherus09
Client
- Регистрация
- 10.10.2016
- Сообщения
- 172
- Благодарностей
- 14
- Баллы
- 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 - Авто Гамма
Данный метод принимает следующие параметры:
Посмотреть вложение 45787
Посмотреть вложение 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); }
Посмотреть вложение 45790 Посмотреть вложение 45791
2. BitDepth - Бит глубина
Данный метод принимает следующие параметры:
Посмотреть вложение 45792
Посмотреть вложение 45793
Посмотреть вложение 45794
Посмотреть вложение 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); }
Посмотреть вложение 45796 Посмотреть вложение 45797
3. BlueShift - Синее смещение
Данный метод принимает следующие параметры:
Посмотреть вложение 45798
Посмотреть вложение 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); }
Посмотреть вложение 45800 Посмотреть вложение 45801
4. Blur - Расплывшиеся очертания
Данный метод принимает следующие параметры:
Посмотреть вложение 45781
Посмотреть вложение 45782
Посмотреть вложение 45783
Посмотреть вложение 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); }
Посмотреть вложение 45785 Посмотреть вложение 45786
5. CannyEdge - Осторожный край
Данный метод принимает следующие параметры:
Посмотреть вложение 45802
Посмотреть вложение 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); }
Посмотреть вложение 45804 Посмотреть вложение 45805
6. Charcoal - Древесный уголь
Данный метод принимает следующие параметры:
Посмотреть вложение 45806
Посмотреть вложение 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); }
Посмотреть вложение 45808 Посмотреть вложение 45809
7. ContrastStretch - Контраст Стретч
Данный метод принимает следующие параметры:
Посмотреть вложение 45810
Посмотреть вложение 45811
Посмотреть вложение 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); }
Посмотреть вложение 45813 Посмотреть вложение 45814
8. CycleColormap - Цикл Цветовая карта
Данный метод принимает следующие параметры:
Посмотреть вложение 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); }
Посмотреть вложение 45816 Посмотреть вложение 45817
9. Edge - Край
Данный метод принимает следующие параметры:
Посмотреть вложение 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); }
Посмотреть вложение 45820 Посмотреть вложение 45821
10. Emboss - Выбивать
Данный метод принимает следующие параметры:
Посмотреть вложение 45822
Посмотреть вложение 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); }
Посмотреть вложение 45824 Посмотреть вложение 45825
11. Equalize - Выровнять
Данный метод не принимает параметров:
Посмотреть вложение 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); }
Посмотреть вложение 45827 Посмотреть вложение 45828
12. FloodFill - Заливка
Данный метод принимает следующие параметры:
Посмотреть вложение 45829
Посмотреть вложение 45830
Посмотреть вложение 45831
Посмотреть вложение 45832
Посмотреть вложение 45833
Посмотреть вложение 45834
Посмотреть вложение 45835
Посмотреть вложение 45836
Посмотреть вложение 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); }
Посмотреть вложение 45839 Посмотреть вложение 45840
13. Flop - Провал (Зеркальное отображение)
Данный метод не принимает параметров:
Посмотреть вложение 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); }
Посмотреть вложение 45842 Посмотреть вложение 45843
14. GammaCorrect - Гамма Коррект
Данный метод принимает следующие параметры:
Посмотреть вложение 45844
Посмотреть вложение 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); }
Посмотреть вложение 45846 Посмотреть вложение 45847
15. GaussianBlur - Гауссово размытие
Данный метод принимает следующие параметры:
Посмотреть вложение 45848
Посмотреть вложение 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); }
Посмотреть вложение 45850 Посмотреть вложение 45851
16. Grayscale - Оттенки серого
Данный метод принимает следующие параметры:
Посмотреть вложение 45852
Посмотреть вложение 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); }
Посмотреть вложение 45854 Посмотреть вложение 45855
17. LocalContrast - Местный контраст
Данный метод принимает следующие параметры:
Посмотреть вложение 45857
Посмотреть вложение 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); }
Посмотреть вложение 45859 Посмотреть вложение 45860
18. MedianFilter - Медианный фильтр
Данный метод принимает следующие параметры:
Посмотреть вложение 45861
Посмотреть вложение 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); }
Посмотреть вложение 45863 Посмотреть вложение 45864
19. Modulate - Модуляция
Данный метод принимает следующие параметры:
Посмотреть вложение 45865
Посмотреть вложение 45866
Посмотреть вложение 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); }
Посмотреть вложение 45868 Посмотреть вложение 45869
20. MotionBlur - Размытость
Данный метод принимает следующие параметры:
Посмотреть вложение 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); }
Посмотреть вложение 45871 Посмотреть вложение 45872
21. Negate - Отрицание (инвертирование)
Данный метод принимает следующие параметры:
Посмотреть вложение 45873
Посмотреть вложение 45874
Посмотреть вложение 45875
Посмотреть вложение 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); }
Посмотреть вложение 45877 Посмотреть вложение 45878
22. Normalize - Нормализовать
Данный метод не принимает параметров:
Посмотреть вложение 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); }
Посмотреть вложение 45880 Посмотреть вложение 45881
Смотрите продолжение во второй части...
Да, нужно указывать путь к файлу на ПКпривер, как нужно указывать путь к изображению ? Оно должно быть на компютере? Типа путь а файлу на пк указывать или что?
Понял, спасибо)Да, нужно указывать путь к файлу на ПК
C:\Users\Administrator\Desktop\file.jpg
не подскажешь, а как в зеннопостере допустим сохранять картинки с браузера на пк?Да, нужно указывать путь к файлу на ПК
C:\Users\Administrator\Desktop\file.jpg
уже разобрался, спасибоне подскажешь, а как в зеннопостере допустим сохранять картинки с браузера на пк?
привет, не подскажешь где можно скачать даную библеотеку?Посмотреть вложение 45658
Общая информация
ImageMagick - это мощная библиотека для работы с изображениями, которая поддерживает более 100 основных форматов файлов (не включая подформаты). С Magick.NET вы можете использовать ImageMagick в своем приложении C # / VB.NET / .NET Core, не устанавливая ImageMagick на свой сервер или компьютер.
Библиотека Magick.NET имеет отличие в x86 или x64 разрядности.
Посмотреть вложение 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. В своем проекте, внизу где списки, таблицы, жмем + и выбираем добавить ссылки из GACКод:C:\Program Files\ZennoLab\RU\ZennoPoster Pro\5.39.0.0\Progs\ExternalAssemblies
Посмотреть вложение 45773
В появившемся окошке жмем добавить:
Посмотреть вложение 45774
Далее жмем обзор:
Посмотреть вложение 45775
Переходим в папку ExternalAssemblies и выбираем библиотеку в данном случае Magick.NET-Q8-AnyCPU.dll и жмем открыть.
Посмотреть вложение 45776
После добавления, в окне ссылки из GAC появится библиотека
Посмотреть вложение 45777
3. Теперь осталось подключить директивы using.
В своем проекте, внизу где списки, таблицы, жмем + и выбираем добавить директивы using и общий код
Посмотреть вложение 45778
В открывшимся окне переходим во вкладку Директивы Using и в поле ниже вставляем, и закрываем это окно.
Посмотреть вложение 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); } }
Посмотреть вложение 46120 Посмотреть вложение 46121
Посмотреть вложение 46122 Посмотреть вложение 46123
Посмотреть вложение 46124 Посмотреть вложение 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); } }
Посмотреть вложение 46114 Посмотреть вложение 46115
Посмотреть вложение 46116 Посмотреть вложение 46117
Посмотреть вложение 46118 Посмотреть вложение 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); } }
Посмотреть вложение 46126 Посмотреть вложение 46127
Посмотреть вложение 46128 Посмотреть вложение 46129
Посмотреть вложение 46136 Посмотреть вложение 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); }
Посмотреть вложение 46479 Посмотреть вложение 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); } }
Посмотреть вложение 46173
В переменной WatermarkImagePath указать путь к изображению которое нужно наложить
Посмотреть вложение 46175
В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
Посмотреть вложение 46176
в коде можно выбрать место расположение водяного знака на изображении, ставим точку, всплывет окошечко, выбираем.
Посмотреть вложение 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); } }
Посмотреть вложение 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); } } }
Посмотреть вложение 46180
В переменной SecondImagePath указать путь ко второму изображению
Посмотреть вложение 46181
В переменной SaveImagePath указать путь куда сохраняем обработанное изображение. В результате нам показывает то, чего нету на втором изображении, то есть разницу)
Посмотреть вложение 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; }
Посмотреть вложение 46199
Посмотреть вложение 46202
Информация о картинке (формат, размер, битность, цветность)
Кодом ниже, можно получить краткую информацию о изображении
В переменной InputImagePath указать путь к изображениюC#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению using (MagickImage image = new MagickImage(InputImagePath)){ project.Variables["InfoImage"].Value = image.ToString(); }
Посмотреть вложение 46206
Посмотреть вложение 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); }
Посмотреть вложение 46211
В файлике мы увидим следующее: общее количество пикселей, которое на изображении, и информацию про каждый пиксель, его координаты расположения на изображении и цвет
Посмотреть вложение 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); }
Посмотреть вложение 46218
В переменной HexColor появится значение цвета в hex, а в переменной ColorRGB появится значение цвета в rgb
Посмотреть вложение 46219
посмотрим в гугле:
Посмотреть вложение 46221
Действительно, на фоне (задний с лева и нижний план изображения) больше темного чем светлого.
Практика (работа с капчей)
Это не это?Делаем капчу черно-белой
Есть два способа сделать изображение капчи черно-белым:
Первый способ
Monochrome, специально капчи выискивать не буду, покажу на примере тех что у меня есть, решил совсем немного затронуть эту тему, чтоб было понимание того, как сделать капчу черно-белой)
Посмотреть вложение 46222 Посмотреть вложение 46223 Посмотреть вложение 46224
Если просто применить монохром, то они будут такие:
Посмотреть вложение 46225 Посмотреть вложение 46226 Посмотреть вложение 46227
Но как мы с вами помним, у нас есть инвертирующий фильтр, метод Negate(), давайте им и воспользуемся
Посмотреть вложение 46228 Посмотреть вложение 46229 Посмотреть вложение 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));
Капча клавиши
Посмотреть вложение 46233 Посмотреть вложение 46234 Посмотреть вложение 46235
Задача избавится от самых клавиш, чтоб остались только числа, приступим
1. Воспользуемся фильтром Threshold(new Percentage(95));
Посмотреть вложение 46236 Посмотреть вложение 46237 Посмотреть вложение 46238
2. Воспользуемся фильтром заливки FloodFill(MagickColors.Black, 0, 0); зальем черным цветом
Посмотреть вложение 46239 Посмотреть вложение 46240 Посмотреть вложение 46241
3. Тот же самый фильтр FloodFill(MagickColors.White, 0, 0); только зальем белым цветом
Посмотреть вложение 46242 Посмотреть вложение 46244 Посмотреть вложение 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); }
Посмотреть вложение 46248
Посмотреть вложение 46249
Посмотреть вложение 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# в интернете нету, я облазил все вдоль и поперек, не нашел, все делал своими силами