В рамках поддержки этой статьи на конкурсе решил опубликовать серию коротких советов, которые не все знают, но бывают очень полезными для новичков.
Они не подходят по тематике статьи и не тянут на отдельную статью. Поэтому буду периодически постить их в топике.
Итак
ZENNO TIPS © от Astraport®
Задача.
Создание GIF из картинок. На форуме решения не нашел. Из 3-х найденных C# библиотек по этому функционалу, только одна относительно работоспособная.
Обоснование.
1. В соц. сетях часто требуется уникальный контент.
2. Гиф-анимация привлекает внимание.
3. Некоторые сети дают преимущество в показах (Тамблер, Пинтерест).
Процесс.
1. Качаем библиотеку
https://github.com/DataDink/Bumpkit/tree/master/Binary
2. Добавляем BumpKit.dll в папку ExternalAssemblies ЗенноПостера.
3. Добавляем BumpKit.dll в GAC
4. В общий код добавляем
using BumpKit;
5. Затем строим логику работы с изображениями. В моём случае она такая:
1) Получаем все картинки из нашей директории в список и перемешиваем его.
2) Сохраняем несколько картинок, в зависимости от количества кадров в итоговой GIF в отдельную папку параллельно изменяя их размеры (чтобы не было полей по краям), подрезая, добавляя надписи и стикеры.
3) Формируем список из созданных слайдов и генерируем GIF таким кодом:
var photo = project.Lists["photo"];
MemoryStream ms = new MemoryStream();
GifEncoder encoder = new GifEncoder(ms, null, null, -1);
Image img = null;
for (int i = 0; i<photo.Count; i++){
try {
img = Image.FromFile(photo[i]);
} catch (Exception u) {
return u.Message;
}
encoder.AddFrame(img,0, 0, TimeSpan.FromSeconds(2));//пауза между кадрами 2 секунды
img.Dispose();
}
FileStream fs = new FileStream("c:\\" + project.Variables["folder"].Value + "\\" + project.Variables["folder"].Value + ".gif", FileMode.Create, FileAccess.Write, FileShare.Write);
ms.WriteTo(fs);
4) Загружаем ГИФ на сайт, удаляем временные картинки и папки.
Результат.