Excel催化剂在图片处理方面,也是做到极致化,一般的Excel插件插入图片是原图插入或不可控制压缩比例地方式插入图片至Excel当中,但Excel催化剂的插入图片,是开发了可调节图片大小的插入方式,让图片在Excel上可以有预期的像素大小和文件大小的平衡。 在图片处理方面,完全可以借助一个非常棒的类库,实现美图秀秀那般日常的图片处理。
Excel催化剂在图片处理方式,使用了一个类库:ImageFactory,里面有非常丰富的图片处理功能,一点不输python的图片类库。
具体的详尽使用方式可参考官网:https://imageprocessor.org/imageprocessor/imagefactory/#example
它不止有桌面端的版本,也有web版,处理性能也很快,没有内存泄露问题。
google翻译官网介绍
代码调用非常优雅简洁,如下取自官网示例代码:
byte[] photoBytes = File.ReadAllBytes(file);
// Format is automatically detected though can be changed.
ISupportedImageFormat format = new JpegFormat { Quality = 70 };
Size size = new Size(150, 0)
using (MemoryStream inStream = new MemoryStream(photoBytes))
{
using (MemoryStream outStream = new MemoryStream())
{
// Initialize the ImageFactory using the overload to preserve EXIF metadata.
using (ImageFactory imageFactory = new ImageFactory(preserveExifData:true))
{
// Load, resize, set the format and quality and save an image.
imageFactory.Load(inStream)
.Resize(size)
.Format(format)
.Save(outStream);
}
// Do something with the stream.
}
}
Excel催化剂使用的代码片段如下:
对图片的最长边进行控制,使用AutoRotate方法根据Exif信息旋转图片,再使用Resize方法进行调整大小,最后怕图片太大,用Quality方法压缩下。
因上层方法需要使用Image对象,不能在当前方法进行释放,对其进行Clone返回,不知道这样处理是否合理,有高手看到可以指教下。
public static Image GetImageByReduceSize(string filePath)
{
using (ImageFactory imageFactory = new ImageFactory())
{
var img = imageFactory.Load(filePath);
img.AutoRotate();
int picInsertSrcMaxPixed = Properties.Settings.Default.PicInsertSrcMaxPixed;
Size orgSize = img.Image.Size;
if (orgSize.Height > orgSize.Width)
{
if (orgSize.Height > picInsertSrcMaxPixed)
{
img.Resize(new Size(0, picInsertSrcMaxPixed));
}
}
else
{
if (orgSize.Width > picInsertSrcMaxPixed)
{
img.Resize(new Size(picInsertSrcMaxPixed, 0));
}
}
return (Image)img.Quality(70).Image.Clone();
}
}