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

官网: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]+", "")); }
                }
            }
        }
    }

原文链接:https://blog.csdn.net/zxpei/article/details/116595190

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    请登录后查看评论内容