C# 快速获取图片大小以及分辨率(使用metadata-extractor)

C# 快速获取图片大小以及分辨率(使用metadata-extractor)

官网:metadata-extractor官网
安装:PM> Install-Package MetadataExtractor

注:该控件功能很多,能获取图片的基本所有信息,且速度很快,这里只使用了获取照片的大小以及分辨率

由于软件需要频繁读取JPG文件的像素以及分辨率,早期使用Image类,这个就不说了,速度是惨不忍睹。后来使用SOF0段读取,速度快是快了,但是使用一段时间后发现如果PS保存照片的时候基线不对或者其他一些情况会导致读取不出来尺寸,而且分辨率格式不同无法识别(像素/英寸,像素/厘米)。。。。。

。。发现一个问题:JPG格式为连续扫描时,这个提取文件尺寸惨不忍睹,所以又想了个别的办法:https://blog.csdn.net/zxpei/article/details/116651526

使用metadata-extractor:
安装或引用后先 using MetadataExtractor

public static void GetJpgSizeByME(string JpgPath, out Size JpgSize, out float Wpx, out float Hpx)
		{
			var rmd = ImageMetadataReader.ReadMetadata(JpgPath);
			JpgSize = new Size(0, 0);
			Wpx = 0;
			Hpx = 0;
			foreach (var rd in rmd)
			{
				if (JpgSize.Height > 0 && JpgSize.Width > 0 && Wpx > 0 && Hpx > 0) break;
				string units = "";
				Tag item = rd.Tags.FirstOrDefault((a) => a.Name == "Resolution Units" || a.Name == "Resolution Unit");//单位,英寸或厘米
				if (item != null) units = item.Description.ToLower();
				foreach (var tag in rd.Tags)
				{
					//图片高的标签
					if (tag.Name == "Image Height" && JpgSize.Height == 0)
					{
						JpgSize.Height = int.Parse(Regex.Replace(tag.Description, @"[^0-9]+", ""));
					}
					//宽片宽的标签
					else if (tag.Name == "Image Width" && JpgSize.Width == 0)
					{
						JpgSize.Width = int.Parse(Regex.Replace(tag.Description, @"[^0-9]+", ""));
					}
					//水平分辨率
					else if (tag.Name == "X Resolution" && Wpx == 0)
					{
						if (units == "centimetre" || units == "cm")//像素/厘米 
						{
							Wpx = 2.54f * int.Parse(Regex.Replace(tag.Description, @"[^0-9]+", ""));
						}
						else if (units == "inch")//像素/英寸
						{
							Wpx = int.Parse(Regex.Replace(tag.Description, @"[^0-9]+", ""));
						}
					}
					//垂直分辨率
					else if (tag.Name == "Y Resolution" && Hpx == 0)
					{
						if (units == "centimetre" || units == "cm")//像素/厘米
						{
							Hpx = 2.54f * int.Parse(Regex.Replace(tag.Description, @"[^0-9]+", ""));
						}
						else if (units == "inch")//像素/英寸
						{
							Hpx = int.Parse(Regex.Replace(tag.Description, @"[^0-9]+", ""));
						}

					}
				}
			}
		}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值