C#快速获取图像大小和分辨率(shell32)
程序员文章站
2022-04-09 20:05:48
...
C#快速获取图像大小和分辨率(shell32)
昨天使用metadata-extractor获取图像和分辨率,对于绝大多数图片的提取没有问题,今天进行批量图片测试发现对于JPEG格式为连续扫描的图片,数据惨不忍睹,读取时间比Image类还慢一半,无法忍受。。
尝试使用shell32,读取文件信息。未进行大批量测试,先做个记录
VS中引用 .COM 中的 Microsoft Shell Controls and Automation 修改嵌入互操作类型为 False
然后 using Shell32
public static void GetJpgSizeByShell(string JpgPath, out Size JpgSize, out float Wpx, out float Hpx)
{
var shell = new ShellClass();
Folder der = shell.NameSpace(Path.GetDirectoryName(JpgPath));
FolderItem item = der.ParseName(Path.GetFileName(JpgPath));
JpgSize = new Size(0, 0);
try
{
Wpx = float.Parse(Regex.Replace(der.GetDetailsOf(item, 161), @"[^0-9]+", ""));//水平分辨率
int w = int.Parse(Regex.Replace(der.GetDetailsOf(item, 162), @"[^0-9]+", ""));//图片宽像素
Hpx = float.Parse(Regex.Replace(der.GetDetailsOf(item, 163), @"[^0-9]+", ""));//垂直分辨率
int h = int.Parse(Regex.Replace(der.GetDetailsOf(item, 164), @"[^0-9]+", ""));//图片高像素
JpgSize.Width = w;
JpgSize.Height = h;
}
catch
{
JpgSize = new Size(0, 0);
Wpx = 0;
Hpx = 0;
}
}
上一篇: 【图片与文字的合成】
下一篇: 判断两个集合的值是否相等