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

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 227
Благодарностей
801
Баллы
113
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 все отлично работает. :ay:
Заметил единственный недостаток, при первом запуске, код обрабатывается пару секунд, потом все выполняется мгновенно за доли секунды, думаю это связано с тем, что в начале идет определение x86 или x64 системы. Вы же можете попробовать другие варианты, на ваш выбор.

Подключение библиотеки Magick.NET

Тут не чего сложного, все как всегда, а для тех кто не в курсе, как подключить, читаем ниже:

1. Скопируйте скаченную библиотеку в папку ExternalAssemblies которая находится:

Код:
C:\Program Files\ZennoLab\RU\ZennoPoster Pro\5.39.0.0\Progs\ExternalAssemblies
2. В своем проекте, внизу где списки, таблицы, жмем + и выбираем добавить ссылки из GAC

45773


В появившемся окошке жмем добавить:

45774


Далее жмем обзор:

45775


Переходим в папку ExternalAssemblies и выбираем библиотеку в данном случае Magick.NET-Q8-AnyCPU.dll и жмем открыть.

45776



После добавления, в окне ссылки из GAC появится библиотека

45777



3. Теперь осталось подключить директивы using.

В своем проекте, внизу где списки, таблицы, жмем + и выбираем добавить директивы using и общий код

45778


В открывшимся окне переходим во вкладку Директивы Using и в поле ниже вставляем, и закрываем это окно.

C#:
using ImageMagick;
using ImageMagick.Configuration;
using ImageMagick.Defines;
using ImageMagick.ImageOptimizers;
45780



Если вы все делали по шагово, так как тут описано, значит вы правильно подключили библиотеку Magick.NET с чем я вас и поздравляю)
 
Категория
Полезно
Последнее редактирование:

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 227
Благодарностей
801
Баллы
113
Теория, обзор и примеры методов (фильтров) 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



Смотрите продолжение во второй части...
 
Последнее редактирование:

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 227
Благодарностей
801
Баллы
113
Теория, обзор и примеры методов (фильтров) II
23. OilPaint - Масляная краска

Данный метод принимает следующие параметры:

45887


45888


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.OilPaint(1.5, 2.2);
       image.Write(SaveImagePath);
}

45889
45890



24. Opaque - Непрозрачный (замена цвета RGB)

Данный метод принимает следующие параметры:

45891


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Opaque(MagickColor.FromRgb(255, 255, 255), MagickColor.FromRgb(0, 255, 0));
       image.Write(SaveImagePath);
}

45892
45893



25. Posterize - Постеризовать

Данный метод принимает следующие параметры:

45894


45895


45896


45897


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Posterize(3);
       image.Write(SaveImagePath);
}

45898
45899




26. ReduceNoise - Снизить уровень шума

Данный метод принимает следующие параметры:

45900


45901


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.ReduceNoise(5);
       image.Write(SaveImagePath);
}

45902
45903




27. Resample - Повторно образец

Данный метод принимает следующие параметры:

45904


45905


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Resample(22, 22);
       image.Write(SaveImagePath);
}

45907
45908




28. Resize - Изменение размера

Данный метод принимает следующие параметры:

45910


45911


45912


45913


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Resize(225, 150);
       image.Write(SaveImagePath);
}

45916
45917



А еще можно задать прямой размер изображению, используя код:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
MagickGeometry size = new MagickGeometry(290, 204); // желаемый размер изображения
                             size.IgnoreAspectRatio = true;
                             image.Resize(size);
                             image.Write(SaveImagePath);
}
или так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Resize(new ImageMagick.MagickGeometry("200x75!")); // задать прямой размер картинке
       image.Write(SaveImagePath);
}


29. Rotate - Поворот

Данный метод принимает следующие параметры:

45919


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Rotate(90);
       image.Write(SaveImagePath);
}

45921
45922




30. Sample - Образец

Данный метод принимает следующие параметры:

45923


45924


45925


45927


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Sample(100, 40);
       image.Write(SaveImagePath);
}
45934
45935


Так же можно увеличить изображение в n - раз, используя код ниже:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
      image.Sample(new ImageMagick.Percentage(200)); // увеличить размер картинки в процентах, 200 это в 2 раза, 1000 это в 10 раз
       image.Write(SaveImagePath);
}


31. Scale - Масштаб

Данный метод принимает следующие параметры:

45936


45937


45938


45939


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Scale(500, 325);
       image.Write(SaveImagePath);
}

45941
45942




32. SelectiveBlur - Выборочное размытие

Данный метод принимает следующие параметры:

45943


45944


45945


45947


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.SelectiveBlur(3, 7, new Percentage(75));
       image.Write(SaveImagePath);
}

45951
45952




33. SepiaTone - Сепия тон

Данный метод принимает следующие параметры:

45956


45957


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.SepiaTone(new Percentage(80));
       image.Write(SaveImagePath);
}

45959
45960




34. Shade - Тень

Данный метод принимает следующие параметры:

45961


45962


45963


45964


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Shade(25, 25);
       image.Write(SaveImagePath);
}

45965
45966




35. Sharpen - Резкость

Данный метод принимает следующие параметры:

45967


45968


45969


45970


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Sharpen(5, 5);
       image.Write(SaveImagePath);
}

45973
45974




36. Shave - Бритье

Данный метод принимает следующие параметры:

45975


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Shave(3, 15);
       image.Write(SaveImagePath);
}

45976
45977




37. Shear - Cдвиг

Данный метод принимает следующие параметры:

45978


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Shear(3, 15);
       image.Write(SaveImagePath);
}

45980
45981




38. SigmoidalContrast - Сигмоидальный контраст

Данный метод принимает следующие параметры:

45983


45984


45985


45986


45987


45988


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.SigmoidalContrast(10);
       image.Write(SaveImagePath);
}

45989
45990




39. Sketch - Эскиз

Данный метод принимает следующие параметры:

45991


45992


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Sketch(5, 7, 15);
       image.Write(SaveImagePath);
}

45994
45995




40. Solarize - Передержка

Данный метод принимает следующие параметры:

45996


45997


45998


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Solarize(new Percentage(50));
       image.Write(SaveImagePath);
}

45999
46000



Смотрите продолжение в третьей части...
 
Последнее редактирование:

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 227
Благодарностей
801
Баллы
113
Теория, обзор и примеры методов (фильтров) III
41. Spread - Размазывать

Данный метод принимает следующие параметры:

46003


46004


46005


Пользоваться так:


C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Spread(3);
       image.Write(SaveImagePath);
}

46006
46007




42. Statistic - Cтатистика

Данный метод принимает следующие параметры:

46008


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Statistic(StatisticType.Minimum, 2, 5);
       image.Write(SaveImagePath);
}

46010
46011




43. Swirl - Водоворот

Данный метод принимает следующие параметры:

46012


46013


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Swirl(80);
       image.Write(SaveImagePath);
}

46015
46016




44. Threshold - Порог

Данный метод принимает следующие параметры:

46018


46019


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Threshold(new Percentage(70));
       image.Write(SaveImagePath);
}

46020
46021




45. Thumbnail - Что-либо размером с ноготь

Данный метод принимает следующие параметры:

46022


46023


46024


46025


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Thumbnail(new Percentage(10), new Percentage(10));
       image.Write(SaveImagePath);
}

46026
46027




46. Transpose - Транспонирование

Данный метод не принимает параметров:

46028


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Transpose();
       image.Write(SaveImagePath);
}

46029
46030




47. Transverse - Поперечный

Данный метод не принимает параметров:

46032


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Transverse();
       image.Write(SaveImagePath);
}

46033
46034




48. Trim + ColorFuzz / Подравнивание + Цветной пух

Данный метод принимает следующие параметры:

46035


46036


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.ColorFuzz = new Percentage(10);
       image.Trim();
       image.Write(SaveImagePath);
}

46039
46040




49. UnsharpMask - Нерезкая маска

Данный метод принимает следующие параметры:

46041


46042


46043


46044


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.UnsharpMask(1, 3);
       image.Write(SaveImagePath);
}

46045
46046




50. WaveletDenoise - Вейвлет Денуаз

Данный метод принимает следующие параметры:

46049


46050


46051


46053


Пользоваться так:

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение
using (MagickImage image = new MagickImage(InputImagePath)){
       image.WaveletDenoise(new Percentage(95), 15);
       image.Write(SaveImagePath);
}

46060
46061




51. Monochrome - монохром

Пользоваться так:

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.Write(SaveImagePath);
}

46067
46068
 
Последнее редактирование:

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 227
Благодарностей
801
Баллы
113
Практика (полезняшки)

Изображение в виде кнопки

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




Наложение водяного знака на изображение

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);
    }
}
В переменной InputImagePath указать путь к изображению

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




Сравниваем два изображения и получаем разницу

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);
        }
    }
}
В переменной FirstImagePath указать путь к первому изображению

46180



В переменной SecondImagePath указать путь ко второму изображению

46181



В переменной SaveImagePath указать путь куда сохраняем обработанное изображение. В результате нам показывает то, чего нету на втором изображении, то есть разницу)

46182




Картинку в Base64

Это может быть полезно при работе с капчами, чтоб изображение не сохранять на диск после обработки фильтрами, а сразу конвертировать в base64, и отправить на кап монстр :-)

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
using (MagickImage image = new MagickImage(InputImagePath)){
    string Base64 = image.ToBase64();
    project.Variables["Base64"].Value =  Base64;
}
В переменной InputImagePath указать путь к изображению

46199



46202




Информация о картинке (формат, размер, битность, цветность)

Кодом ниже, можно получить краткую информацию о изображении

C#:
string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению
using (MagickImage image = new MagickImage(InputImagePath)){
    project.Variables["InfoImage"].Value = image.ToString();
}
В переменной InputImagePath указать путь к изображению

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);
}


Получить размер изображения

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();
}
В переменной Size появится размер изображения.




Доминирующий цвет на изображении

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 / Порог

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(45));
а для остальных двух 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, мы добились желаемого результата, теперь капмонстру куда легче стало распознавать капчу)

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);
}
Если процент разгадывания не устраивает, хотелось бы еще повысить? Как вариант можно увеличить изображение в 2 а то и в 3 раза с помощью метода Sample(new Percentage(200)); 200 - в 2 раза, 300 - в 3 раза. Так же еще можно воспользоваться методом сглаживания Blur(1, 3); и с помощью метода Trim(); обрезать до черных пикселей. Давайте ради любопытства сделаем это)

46248


46249


46250


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);
}
Как видите, добавляя метод за методом, происходит магия) Не обязательно сохранять изображение после каждого применения фильтра. Можно сразу применить все и потом сохранить, либо конвертировать в base64 и отправить на кап монстр.

Официальный форум(на английском языке) Magick.NET - тык
Официальный сайт(на английском языке) - тык
Github - тык

P.S Документации по Magik.NET C# в интернете нету, я облазил все вдоль и поперек, не нашел, все делал своими силами :(
 

Вложения

Последнее редактирование:

DenisK

Client
Регистрация
28.06.2016
Сообщения
363
Благодарностей
151
Баллы
43
  • Спасибо
Реакции: sergodjan66 и samsonnn

letr

Новичок
Регистрация
29.10.2017
Сообщения
15
Благодарностей
4
Баллы
3
Вот молодчина то какой просто + от души . Мега полезная вещ даже например ватермарки по имиджам выставить и то хорошо - а можно и по уникализации картинок пошерстить... Правда посидеть покурить экзамплы конечно придется...
 
  • Спасибо
Реакции: sergodjan66 и samsonnn

guloc

Client
Регистрация
12.09.2016
Сообщения
178
Благодарностей
108
Баллы
43
Отличная статья. Нравятся статьи где больше практики и меньше теории, делай так получишь вот так и тд.
 
  • Спасибо
Реакции: sergodjan66 и samsonnn

russya

Client
Регистрация
08.07.2014
Сообщения
621
Благодарностей
54
Баллы
28
круто! спасибо за статью
 

Valandersi

Client
Регистрация
19.01.2015
Сообщения
1 206
Благодарностей
529
Баллы
113
Одна из лучших статей пока лично для меня
 
  • Спасибо
Реакции: sergodjan66 и samsonnn
Регистрация
13.04.2016
Сообщения
464
Благодарностей
17
Баллы
18
Очень крутая статья!!! + за труд...

2 вопроса назрели перед практикой:


1) пропорциональный размер изображения (не обрезая)
2) .jpg в формат .png (в другом направлении можно сделать?)
 
  • Спасибо
Реакции: sergodjan66 и samsonnn

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 227
Благодарностей
801
Баллы
113
Очень крутая статья!!! + за труд...

2 вопроса назрели перед практикой:


1) пропорциональный размер изображения (не обрезая)
2) .jpg в формат .png (в другом направлении можно сделать?)
Думаю да можно, а почему нет? Попробуйте, мне тоже интересно стало, теоретически должно все получится)
 

Gefest

Client
Регистрация
30.04.2016
Сообщения
73
Благодарностей
13
Баллы
8
Какие отличия от ImageProcessor будут ?

А можно например как то короче сделать, без
C#:
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Swirl(80);
       image.Write(SaveImagePath);
Объект создать и уже с ним работать, и применять несколько фильтров
 
  • Спасибо
Реакции: samsonnn

juk88

Client
Регистрация
30.05.2018
Сообщения
45
Благодарностей
10
Баллы
8
О! Это то, что доктор прописал!!! Уже кучу своих проблем решил с помощью этой статьи!!!
 
  • Спасибо
Реакции: sergodjan66 и samsonnn

Nike59

Client
Регистрация
05.08.2011
Сообщения
66
Благодарностей
47
Баллы
18
Разложены по полкам инструменты для работы с изображениями в виде готового кода. Разложены на понятные ингредиенты инструкции к каждому инструменту. Получился такой оборудованный всем необходимым для работы с изображениями верстак мастера-zenno-вода.
 
  • Спасибо
Реакции: sergodjan66 и samsonnn

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 227
Благодарностей
801
Баллы
113
Какие отличия от ImageProcessor будут ?
С помощью Magick.Net можно работать с разными форматами, изображений, резать, склеивать, конвертировать pdf файлы, создавать gif анимации, извлекать таблицы с документов и многое другое, этого в моей статье нету, я физически не успел все изучить и попробовать. Без документации, без примеров очень тяжело самостоятельно сотворить чтоб в статье показать как это работает. Тут одна морфология тянет на полноценную статью - смотрите тут, можете перейти на официальный сайт и почитать самостоятельно, если у вас есть желание и время, можете для себя что то новое там изучить, то чего нету в моей статье)


А можно например как то короче сделать, без
C#:
using (MagickImage image = new MagickImage(InputImagePath)){
       image.Swirl(80);
       image.Write(SaveImagePath);
Объект создать и уже с ним работать, и применять несколько фильтров
Конечно можно, даже нужно) В примере про капча клавиши как раз рассматривается и показывается то что вам нужно)
 
Последнее редактирование:
  • Спасибо
Реакции: juk88

vrska

Client
Регистрация
07.02.2010
Сообщения
378
Благодарностей
222
Баллы
43

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 227
Благодарностей
801
Баллы
113
Вот же она
Нет это не документация, документация это где описываются классы, методы, и так далее, как в зенке, а там такого нету.
Вот такого плана должна быть документация - тык
 

doriandor

Client
Регистрация
26.12.2014
Сообщения
4
Благодарностей
1
Баллы
3
Здравствуйте! А есть метод для того что бы белый фон в png "превращать" в прозрачный?
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 227
Благодарностей
801
Баллы
113
Здравствуйте! А есть метод для того что бы белый фон в png "превращать" в прозрачный?
C#:
string InputImagePath = project.Variables["InputImagePath"].Value;
string SaveImagePath = project.Variables["SaveImagePath"].Value;
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);
}
P.S добавил в полезняшки :-)
 
Последнее редактирование:
  • Спасибо
Реакции: Маломальский

radv

Client
Регистрация
11.05.2015
Сообщения
634
Благодарностей
285
Баллы
63
Кстати, как идея можно все эти блоки вынести в свои кубики/плагины и использовать уже их, если в коде вы плохо разбираетесь
 

Master Woo

Client
Регистрация
06.12.2014
Сообщения
94
Благодарностей
45
Баллы
18
можно ли с помощью данной библиотеки добавлять текст на картинку? желательно красиво...
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 227
Благодарностей
801
Баллы
113
можно ли с помощью данной библиотеки добавлять текст на картинку? желательно красиво...
Можно как то так:

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);
    }
}
P.S добавил в полезняшки :-)
 
Последнее редактирование:

Master Woo

Client
Регистрация
06.12.2014
Сообщения
94
Благодарностей
45
Баллы
18
Можно как то так:

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 = 500 }; // Высота текста
    image.Alpha(AlphaOption.Opaque);
    using (MagickImage label = new MagickImage("label:Тут какой то текст", readSettings)){
        image.Composite(label, 200, 100, CompositeOperator.Over); // расположение текста на картинке 200 слева, 100 сверху
        image.Write(SaveImagePath);
    }
}
P.S добавил в полезняшки :-)
спс за пример. а можно как-то сделать, чтобы текст был по середине(как в ворде "выравнивание по центру") ?
 

Gefest

Client
Регистрация
30.04.2016
Сообщения
73
Благодарностей
13
Баллы
8
Может глупость спрошу, но в чем отличие между этими вариантами ?
C#:
using (MagickImage image = new MagickImage(InputImagePath))
{
       image.Blur(6, 6);
       image.Write(SaveImagePath);
}
C#:
MagickImage image = new MagickImage(InputImagePath);
image.Blur(6,6);
image.Write(SaveImagePath);
Первый для общего кода ?

Но статья вообще уисшая просто! 12 конкурс крутой очень
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 227
Благодарностей
801
Баллы
113
Может глупость спрошу, но в чем отличие между этими вариантами ?
C#:
using (MagickImage image = new MagickImage(InputImagePath))
{
       image.Blur(6, 6);
       image.Write(SaveImagePath);
}
C#:
MagickImage image = new MagickImage(InputImagePath);
image.Blur(6,6);
image.Write(SaveImagePath);
Первый для общего кода ?

Первый вариант обернут в using, а во втором варианте нужно дергать метод .Dispose() для того чтоб освободить ресурсы.
В первом варианте ресурсы освобождается сами, после того как выполнится код который обернут в using.
Другими словами если не освобождать ресурсы, то будет конфликтовать, что то типа: такой то процесс занят другим процессом, и будет валится по ошибке.
 
  • Спасибо
Реакции: Gefest

Gefest

Client
Регистрация
30.04.2016
Сообщения
73
Благодарностей
13
Баллы
8
Первый вариант обернут в using, а во втором варианте нужно дергать метод .Dispose() для того чтоб освободить ресурсы.
В первом варианте ресурсы освобождается сами, после того как выполнится код который обернут в using.
Другими словами если не освобождать ресурсы, то будет конфликтовать, что то типа: такой то процесс занят другим процессом, и будет валится по ошибке.
Вспомнил что такое же в ImageProcessor было, там просто код тупил и не выполнялся если например запустить несколько фильтров без Dispose
 

pogosara

Client
Регистрация
01.08.2019
Сообщения
8
Благодарностей
7
Баллы
3
Спасибо! Хорошая библиотека, а автору за труд отдельный - рахмат!
 
  • Спасибо
Реакции: samsonnn

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