- Регистрация
- 23.05.2014
- Сообщения
- 1 500
- Благодарностей
- 1 268
- Баллы
- 113
Доброе время суток, форумчане. Давно не писал статьи. Сегодня, да и еще раньше постоянно встречаются на форуме вопросы типа - как добавить watermark (водяной знак), как добавить фильтр чтобы авито не палил и пр. И каждый раз их отправляют на ... imagemagick. Признаю что софт обладает большими возможностями, но простые пользователи как мы не пользуются 90 процентами возможностей этого софта. Еще один плюс данной темы что не придется долбиться с этой командной строкой, с подбором параметров и прочее. Будет c# код, который сможет каждый отредактировать под свои нужды.
Итак, начнем.
Перво-наперво качаем библиотеку по ссылке https://cloud.mail.ru/public/2b1e65807b86/ImageProcessor.dll . Сразу скомпилировал в dll-библиотеку дабы не возникало вопросов. Вот ссылка для продвинутых https://github.com/JimBobSquarePants/ImageProcessor
Копируем библиотеку в папку ExternallAssemblies. Если ее нет - то создаем.
Надеюсь вы дошли до этого пункта) Итак. Что дальше? А дальше нужно написать код. Думаю начать с примера добавления водяного знака.
Вуаля) Размер изменили, водяной знак добавили. Все гут. Возникает вопрос - почему у нас черные рамки. Да потому что картинка изначально 1024*768, а мы ей придаем размера 500*500. Т.е. картинка становится квадратной за счет черных рамок) Надеюсь ясно выразил мысль. Еще один момент. Как вообще узнать координаты вставки картинки. Как они берутся вообще?
Если эта картинка не говорит ни о чем, тогда идем на msdn и читаем) https://msdn.microsoft.com/ru-ru/library/aa1hw2kk(v=vs.110).aspx
Также чтобы узнать все возможности библиотеки идем по ссылке http://imageprocessor.org/imageprocessor/imagefactory/index.html и смотрим пункт Methods. Там показаны все ништяки которые может делать либа.
Друзья! Не бойтесь того кода который расположен выше. Для того чтобы добавить туда например фильтр какой-нить или параметр нужно просто добавить его через точку
Как всегда буду рад выслушать вопросы, пожелания и адекватную критику)
Итак, начнем.
Перво-наперво качаем библиотеку по ссылке https://cloud.mail.ru/public/2b1e65807b86/ImageProcessor.dll . Сразу скомпилировал в dll-библиотеку дабы не возникало вопросов. Вот ссылка для продвинутых https://github.com/JimBobSquarePants/ImageProcessor
Копируем библиотеку в папку ExternallAssemblies. Если ее нет - то создаем.
C#:
using ImageProcessor;
using ImageProcessor.Imaging;
using ImageProcessor.Imaging.Formats;
using System.IO;
using System.Drawing;
Надеюсь вы дошли до этого пункта) Итак. Что дальше? А дальше нужно написать код. Думаю начать с примера добавления водяного знака.
C#:
var path = @"D:\123.jpeg"; // Наш исходный файл
var pathrez = @"D:\1232_new.jpeg"; // Файл куда будем сохранять
FileStream fs = File.OpenWrite(pathrez); // для записи
byte[] photoBytes = File.ReadAllBytes(path); // для чтения
ISupportedImageFormat format = new JpegFormat { Quality = 100 }; // Устанавливаем качество фото на выходе
Size size = new Size(500, 500); // Это размер фото на выходе
TextLayer text = new TextLayer(); // Создаем экземпляр класса
text.FontColor = Color.Blue; // Цвет шрифта синий
text.FontColor = Color.FromArgb(100, 100, 100); // Это тоже цвет, только в RGB
text.FontFamily = new FontFamily("Arial"); // Тип шрифта
text.FontSize = 20; // Размер шрифта
text.DropShadow = true; // Тень
text.Opacity = 30; // Непрозрачность
text.Style = FontStyle.Bold; //Жирный шрифт
text.Text = "ZennoPoster"; // Ну и сам текст
text.Position = new Point(100,100); // Координаты вставки водяного знака
using (MemoryStream inStream = new MemoryStream(photoBytes))
{
using (MemoryStream outStream = new MemoryStream())
{
using (ImageFactory imageFactory = new ImageFactory(preserveExifData:true))
{
// Load, resize, set the format and quality and save an image.
imageFactory.Load(inStream) // грузим картинку
.Resize(size) // меняем размер (500 на 500 см. выше)
.Watermark(text) // добавляем водяной знак
.Format(format) // выбираем формат картинки, т.е jpeg(jpg)
.Save(outStream); // сохраняем в поток
//outStream.CopyTo(inStream);
outStream.WriteTo(fs); // записываем в файл
outStream.Close(); // не забываем закрывать потоки ввода-вывода
}
inStream.Close(); // не забываем закрывать потоки ввода-вывода
fs.Close();
}
}
Вуаля) Размер изменили, водяной знак добавили. Все гут. Возникает вопрос - почему у нас черные рамки. Да потому что картинка изначально 1024*768, а мы ей придаем размера 500*500. Т.е. картинка становится квадратной за счет черных рамок) Надеюсь ясно выразил мысль. Еще один момент. Как вообще узнать координаты вставки картинки. Как они берутся вообще?
Если эта картинка не говорит ни о чем, тогда идем на msdn и читаем) https://msdn.microsoft.com/ru-ru/library/aa1hw2kk(v=vs.110).aspx
Также чтобы узнать все возможности библиотеки идем по ссылке http://imageprocessor.org/imageprocessor/imagefactory/index.html и смотрим пункт Methods. Там показаны все ништяки которые может делать либа.
Друзья! Не бойтесь того кода который расположен выше. Для того чтобы добавить туда например фильтр какой-нить или параметр нужно просто добавить его через точку
C#:
....
imageFactory.Load(inStream)
.Resize(size)
.Watermark(text)
.Rotate(50) // Поворачивает на 50 градусов
.Contrast(100) // Контрасность
.Brightness(50) // Яркость
.Saturation(10) // Насыщенность
.Format(format)
.Save(outStream);
- Категория
- Полезно
Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.