zoukankan      html  css  js  c++  java
  • C#快速获取JPG图片大小及英寸分辨率

    //C#快速获取JPG图片大小及英寸分辨率
            public static int getJpgSize(string
    FileName, out Size JpgSize, out float Wpx, out float Hpx)
           
    {//C#快速获取JPG图片大小及英寸分辨率
                JpgSize = new Size(0, 0);
               
    Wpx = 0; Hpx = 0;
                int rx = 0;
                if
    (!File.Exists(FileName)) return rx;
                FileStream F_Stream =
    File.OpenRead(FileName);
                int ff =
    F_Stream.ReadByte();
                int type =
    F_Stream.ReadByte();
                if (ff != 0xff || type !=
    0xd8)
                {//非JPG文件
                   
    F_Stream.Close();
                    return rx;
                }
               
    long ps = 0;
                do
                {
                   
    do
                    {
                        ff =
    F_Stream.ReadByte();
                        if (ff < 0)
    //文件结束
                        {
                           
    F_Stream.Close();
                            return rx;
                       
    }
                    } while (ff != 0xff);


                    do
                    {
                        type =
    F_Stream.ReadByte();
                    } while (type == 0xff);


                    //MessageBox.Show(ff.ToString() + "," + type.ToString(),
    F_Stream.Position.ToString());
                    ps =
    F_Stream.Position;
                    switch (type)
                   
    {
                        case 0x00:
                        case
    0x01:
                        case 0xD0:
                        case
    0xD1:
                        case 0xD2:
                        case
    0xD3:
                        case 0xD4:
                        case
    0xD5:
                        case 0xD6:
                        case
    0xD7:
                            break;
                        case 0xc0:
    //SOF0段
                            ps = F_Stream.ReadByte() *
    256;
                            ps = F_Stream.Position + ps +
    F_Stream.ReadByte() - 2; //加段长度


                            F_Stream.ReadByte();
    //丢弃精度数据
                            //高度
                           
    JpgSize.Height = F_Stream.ReadByte() * 256;
                           
    JpgSize.Height = JpgSize.Height +
    F_Stream.ReadByte();
                            //宽度
                           
    JpgSize.Width = F_Stream.ReadByte() * 256;
                           
    JpgSize.Width = JpgSize.Width + F_Stream.ReadByte();
                           
    //后面信息忽略
                            if (rx!=1 && rx < 3) rx = rx +
    1;
                            break;
                        case 0xe0:
    //APP0段
                            ps = F_Stream.ReadByte() *
    256;
                            ps = F_Stream.Position + ps +
    F_Stream.ReadByte() - 2; //加段长度


                            F_Stream.Seek(5,SeekOrigin.Current);
    //丢弃APP0标记(5bytes)
                           
    F_Stream.Seek(2,SeekOrigin.Current);
    //丢弃主版本号(1bytes)及次版本号(1bytes)
                            int
    units=F_Stream.ReadByte();
    //X和Y的密度单位,units=0:无单位,units=1:点数/英寸,units=2:点数/厘米


                            //水平方向(像素/英寸)分辨率
                           
    Wpx=F_Stream.ReadByte()*256;
                           
    Wpx=Wpx+F_Stream.ReadByte();
                            if (units == 2) Wpx =
    (float)(Wpx * 2.54); //厘米变为英寸
                           
    //垂直方向(像素/英寸)分辨率
                            Hpx = F_Stream.ReadByte() *
    256;
                            Hpx = Hpx +
    F_Stream.ReadByte();
                            if (units == 2) Hpx =
    (float)(Hpx * 2.54); //厘米变为英寸
                           
    //后面信息忽略
                            if (rx!=2 && rx<3) rx = rx +
    2;
                            break;


                        default:
    //别的段都跳过////////////////
                            ps = F_Stream.ReadByte() *
    256;
                            ps = F_Stream.Position + ps +
    F_Stream.ReadByte() - 2; //加段长度
                           
    break;
                    }
                    if (ps + 1 >= F_Stream.Length)
    //文件结束
                    {
                       
    F_Stream.Close();
                        return rx;
                   
    }
                    F_Stream.Position = ps; //移动指针
                } while (type
    != 0xda); // 扫描行开始
                F_Stream.Close();
                return
    rx;
            }


  • 相关阅读:
    Javascript操作cookie
    上传文件-layui+ashx
    Mysql对查询结果添加序列号
    Maven详解
    解决 go iris ReadJSON 无法获取 json,并提示 unexpected end of JSON input 的错误
    Archlinux 最新安装方法 (2020.07.01-x86_64)之虚拟机 BIOS 安装
    Oracle APEX 发送邮件
    包管理Go module的使用
    Golang 解决 Iris 被墙的依赖包
    解决 Nginx 代理Apex慢的问题
  • 原文地址:https://www.cnblogs.com/wangyt223/p/2669089.html
Copyright © 2011-2022 走看看