环境
.net6
Magick.NET-Q16-AnyCPU 13.5
Magick.NET源码
代码
using ImageMagick;
namespace ImageCompress
{
internal class Program
{
static void Main(string[] args)
{
string inputPath = "imgloading.gif"; // 输入的GIF文件路径
string outputPath = "imgloading_out_new_2.gif"; // 输出的GIF文件路径
int newWidth = 100; // 新的宽度
int newHeight = 100; // 新的高度
int quality = 80; // 压缩质量,范围从0到100,数字越大压缩质量越好
inputPath = "test.png"; // 输入的GIF文件路径
outputPath = "test_out_2.png"; // 输出的GIF文件路径
var info = new MagickImageInfo(inputPath);
//MagickFormat.Png
//MagickFormat.Jpg
//MagickFormat.Gif
//需要自己判断图片是否是GIF
//Console.WriteLine(info.Format);
if (info.Format != MagickFormat.Gif)
{
using var image = new MagickImage(inputPath);
image.Resize(3125 / 3, 1459 / 3);
image.Quality = 100;//压缩质量,数字越大压缩越好
image.Write(outputPath);
}
else
{
using var imagesFromFile = new MagickImageCollection(inputPath);
//合并图像序列。
//这对于具有页面偏移和处理方法的GIF动画序列非常有用
//下面这句话要写
imagesFromFile.Coalesce();
Console.WriteLine(imagesFromFile.Count);
foreach (var image in imagesFromFile)
{
image.Resize(newWidth, newHeight);
image.Quality = quality;
//动画间隔,可以用原来的
//image.AnimationDelay = 100;
//动画方式,Previous可以防止重叠,默认是None
//image.GifDisposeMethod = GifDisposeMethod.Previous;
}
//var memoryCache = new MemoryStream();
//imagesFromFile.Write(memoryCache);
//也可以保存到内存中
imagesFromFile.Write(outputPath);
}
}
}
}
简单几行代码即可实现图片的压缩png透明可以保持、gif动画也可以保持就是为了质量效率不是很高