前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Excel催化剂开源第35波-图片压缩及自动旋转等处理

Excel催化剂开源第35波-图片压缩及自动旋转等处理

作者头像
Excel催化剂
发布2021-08-19 15:47:54
3510
发布2021-08-19 15:47:54
举报
文章被收录于专栏:Excel催化剂

Excel催化剂在图片处理方面,也是做到极致化,一般的Excel插件插入图片是原图插入或不可控制压缩比例地方式插入图片至Excel当中,但Excel催化剂的插入图片,是开发了可调节图片大小的插入方式,让图片在Excel上可以有预期的像素大小和文件大小的平衡。 在图片处理方面,完全可以借助一个非常棒的类库,实现美图秀秀那般日常的图片处理。

Excel催化剂在图片处理方式,使用了一个类库:ImageFactory,里面有非常丰富的图片处理功能,一点不输python的图片类库。

具体的详尽使用方式可参考官网:https://imageprocessor.org/imageprocessor/imagefactory/#example

它不止有桌面端的版本,也有web版,处理性能也很快,没有内存泄露问题。

google翻译官网介绍

代码调用非常优雅简洁,如下取自官网示例代码:

代码语言:javascript
复制
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返回,不知道这样处理是否合理,有高手看到可以指教下。

代码语言:javascript
复制
        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();
            }
        }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Excel催化剂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档