我感觉在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;
}
}

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

被折叠的 条评论
为什么被折叠?



