C#快速获取图像尺寸和分辨率(使用MagickImage)

博主分享了在CSDN上针对获取图片尺寸和分辨率的各种尝试,包括shell32、metadata-extractor和Image类等方法,但都存在速度或兼容性问题。最终,作者发现MagickImage库在读取速度上显著优于之前的方法,尤其是在处理大图片时,速度提升了大约一倍。文章介绍了如何引入和使用MagickImage,并提供了代码示例来展示如何读取图片尺寸和分辨率。

我感觉在CSDN上写文章,我就和这个获取图片尺寸和分辨率杠上了
之前写过两篇文章,分别使用shell32文章链接和metadata-extractor文章链接来获取图像尺寸和分辨率,但是都不如人意。。
开始使用Image类,速度就不多说了。用过的人都知道,特别是大照片
然后使用SOF0段读取,但是会遇到很多图片尺寸读不出来(比如PS保存的时候基线选择连续)
接着使用metadata-extractor,读取尺寸没问题,但是遇到基线为连续的图片,速度惨不忍睹。比系统的Image类还慢
最后又使用shell32,这个要好一些,基本都能读,但是大图片的速度依旧很慢。
基线为连续的情况
到了这里就不想继续折腾了,把这几种方式混合起来用吧,也就是先用SOF0段读取,读取失败再用shell32读取。。就这样凑活用了几个月。
直到最近又想起MagickImage(很久以前做图片裁切和加水印时用过)。Nuget一看,版本都到8.4.0了。果断尝试一下,发现速度比之前混合着用速度差不多能提升一倍。(刚测试了一些之前测试其他几个用的图片就写了这文章,至于会不会以后遇到某些特殊图片速度不如其他几个暂时还未知)

安装方法,可以去官网下载,也可以在VS里面通过NuGet包安装,直接搜索Magick.NET。由于我只是读取图片尺寸,不进行图片处理,所以选择的Q8版本。
引入命名空间

using ImageMagick;

使用也特别简单,只是要注意判断分辨率的格式是“像素/英寸”还是“像素/厘米”

 public static void GetJpgSizeByMagickImage(string JpgPath, out Size JpgSize, out double Wpx, out double Hpx)
        {
            try
            {
                MagickImageInfo image = new MagickImageInfo(JpgPath);
                int w = image.Width;//宽
                int h = image.Height;//高
                JpgSize = new Size(w, h);
                Wpx = image.Density.X;//分辨率
                Hpx = image.Density.Y;//分辨率
                if (image.Density.Units == DensityUnit.PixelsPerCentimeter)//判断分辨率单位
                {
                    Wpx *= 2.54;
                    Hpx *= 2.54;
                }
            }
            catch
            {
                JpgSize = new Size(0, 0);
                Wpx = 0; Hpx = 0;
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值