Можно сказать, что при разработке нашего проекта манипулирование изображениями является очень распространенным, например, изменение размера изображения, объединение изображений, преобразование формата, добавление водяных знаков и т. д. ImageMagick — относительно мощный проект с открытым исходным кодом для манипулирования изображениями в .NET.
ImageMagick — мощная библиотека обработки изображений, поддерживающая более 100 основных форматов файлов (исключая подформаты). С помощью Magick.NET вы можете использовать ImageMagick в приложениях C#/VB.NET/.NET Core без необходимости устанавливать ImageMagick на сервер или рабочий стол.
ImageMagickадрес:https://github.com/dlemstra/Magick.NET
ImageMagick文档адрес:https://github.com/dlemstra/Magick.NET/blob/main/docs/Readme.md
В этой статье в основном представлены следующие функции:
1. Чтение: чтение информации об изображении, поддержка нескольких слоев/кадров, данных Exif и цветов;
2. Настройка: отрегулируйте размер анимированного gif и укажите размер картинки;
3. Преобразование: конвертируйте более 100 форматов друг в друга: CMYK в RGB, CR2 в JPG;
4. Объединить: объединяйте изображения и создавайте анимированные GIF-изображения;
5. PDF: конвертируйте PDF в одно или несколько изображений, а также конвертируйте одно или несколько изображений в PDF;
6. Сжатие: сжатие без потерь;
7. Текст: добавьте текст и водяной знак.
Это проект с открытым исходным кодом, разработанный на основе .NET Standard. Он поддерживает 100 форматов изображений и может использоваться непосредственно в C#/VB.NET/.NET Core.
Если вы хотите конвертировать EPS / PDF / PS файл, вам просто нужно установить Ghostscript. Обязательно устанавливайте только те, которые имеют одинаковую функциональность. GhostScript Версия платформа. Если вы используете 64 Кусочек Версия的 Magick.NET вам также следует установить 64 Кусочек Версия的 Призрачный скрипт. Вы можете использовать 32 Кусочек Версия и64Версия Вместе,Но если вы оставите платформу прежней,Вы получите лучшую производительность。GhostscriptМожно скачать здесь:https://ghostscript.com/releases/gsdnld.html。Если вы не хотите устанавливать его на свой компьютерGhostscript,Вы можете копировать и копировать на свой сервер,И используйте следующий код, сообщающий Magick.NET Местоположение файла gsdll32.dll/gsdl64.dllgswin32c.exe/gswin64c.exe.
MagickNET.SetGhostscriptDirectory(@"C:\MyProgram\Ghostscript");
Magick.NET.Core
// чтение файлов
using (var image = new MagickImage("c:\path\to\Snakeware.jpg"))
{
}
// Потоковое чтение
using (var memStream = LoadMemoryStreamImage()) // Настраиваем чтение изображений
{
using (var image = new MagickImage(memStream))
{
}
}
// Прочитано байт
var data = LoadImageBytes();//Настраиваем чтение байтов
using (var image = new MagickImage(data))
{
}
// Чтение изображений без предопределенных размеров
var settings = new MagickReadSettings();
settings.Width = 800;
settings.Height = 600;
using (var image = new MagickImage("xc:yellow", settings))
{
}
using (var image = new MagickImage())
{
image.Read("c:\path\to\Snakeware.jpg");
image.Read(memStream);
image.Read("xc:yellow", settings);
using (var memStream = LoadMemoryStreamImage()) // Настраиваем чтение изображений
{
image.Read(memStream);
}
}
using ImageMagick;
using (var collection = new MagickImageCollection(@"c:\path\to\SnakewareGif"))
{
collection.Coalesce();
foreach (var image in collection)
{
image.Resize(200, 0);
}
collection.Write(@"c:\path\to\Snakeware.resized.gif");
}
// Изменение размера изображения png
using (var image = new MagickImage(@"c:\path\to\SnakewarePng"))
{
var size = new MagickGeometry(100, 100);
size.IgnoreAspectRatio = true;
image.Resize(size);
image.Write(@"c:\path\to\Snakeware.100x100.png");
}
// gif изменять png
using (var image = new MagickImage("c:\path\to\Snakeware.gif"))
{
// Save frame as jpg
image.Write("c:\path\to\Snakeware.jpg");
}
// изменяться в формате png
var settings = new MagickReadSettings();
settings.Width = 800;
settings.Height = 600;
using (var memStream = new MemoryStream())
{
using (var image = new MagickImage("xc:purple", settings))
{
image.Format = MagickFormat.Png;
image.Write(memStream);
}
}
// png изменять jpeg
using (var image = new MagickImage("c:\path\to\Snakeware.png"))
{
image.Format = MagickFormat.Jpeg;
byte[] data = image.ToByteArray();
}
//pdf изменяемый становится PNG, формат TIF
var settings = new MagickReadSettings();
settings.Density = new Density(300, 300);
using (var images = new MagickImageCollection())
{
images.Read("c:\path\to\Snakeware.pdf", settings);
var page = 1;
foreach (var image in images)
{
image.Write("c:\path\to\Snakeware.Page" + page + ".png");
image.Format = MagickFormat.Ptif;
image.Write("c:\path\to\Snakeware.Page" + page + ".tif");
page++;
}
}
// Изображение изменить в формате pdf
using (var image = new MagickImage("c:\path\to\Snakeware.jpg"))
{
// Create pdf file with a single page
image.Write("c:\path\to\Snakeware.pdf");
}
//Читаем указанный PDF-файл
using (var images = new MagickImageCollection())
{
var settings = new MagickReadSettings();
settings.FrameIndex = 0;
settings.FrameCount = 1;
images.Read("c:\path\to\Snakeware.pdf", settings);
images.Clear();
settings.FrameCount = 2;
images.Read("c:\path\to\Snakeware.pdf", settings);
}
//Добавляем водяной знак
using (var image = new MagickImage("c:\path\to\Snakeware.jpg"))
{
using (var watermark = new MagickImage("c:\path\to\Magick.NET.png"))
{
image.Composite(watermark, Gravity.Southeast, CompositeOperator.Over);
watermark.Evaluate(Channels.Alpha, EvaluateOperator.Divide, 4);
image.Composite(watermark, 200, 50, CompositeOperator.Over);
}
image.Write("c:\path\to\Snakeware.watermark.jpg");
}
//Добавляем текст
using (var image = new MagickImage(new MagickColor("#ff00ff"), 512, 128))
{
new Drawables()
.FontPointSize(72)
.Font("Comic Sans")
.StrokeColor(new MagickColor("yellow"))
.FillColor(MagickColors.Orange)
.TextAlignment(TextAlignment.Center)
.Text(256, 64, "Magick.NET")
.StrokeColor(new MagickColor(0, Quantum.Max, 0))
.FillColor(MagickColors.SaddleBrown)
.Ellipse(256, 96, 192, 8, 0, 360)
.Draw(image);
}
using ImageMagick;
using (var images = new MagickImageCollection())
{
var first = new MagickImage(@"c:\path\to\Snakeware.png");
images.Add(first); var second = new MagickImage(@"c:\path\to\Snakeware.png");
images.Add(second);
using (var result = images.Mosaic())
{
result.Write("Mosaic.png");
}
}