官网:metadata-extractor官网官网:metadata-extractor官网安装:PM> Install-Package MetadataExtractor
注:该控件功能很多,能获取图片的基本所有信息,且速度很快,这里只使用了获取照片的大小以及分辨率
由于软件需要频繁读取JPG文件的像素以及分辨率,早期使用Image类,这个就不说了,速度是惨不忍睹。后来使用SOF0段读取,速度快是快了,但是使用一段时间后发现如果PS保存照片的时候基线不对或者其他一些情况会导致读取不出来尺寸,而且分辨率格式不同无法识别(像素/英寸,像素/厘米)。。。。。
注意:这个方式有一个问题:JPG格式为连续扫描时,这个提取文件尺寸惨不忍睹
使用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]+", "")); }
}
}
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
请登录后查看评论内容