C#快速获取JPG图片大小及英寸分辨率

实验五-jpg解码 一、实验原理 1.jpg编码 JPEG(Joint Photographic Experts Group),文件后缀名为.jpg,.jpeg,是一种常用的图像文件格式。采用有损压缩方式去除冗余的图像和彩色数据,在获得极高压缩率的同时能展现十分丰富生动的图像。 编码过程如图示: 解码为编码的逆过程。 2.jpg文件格式 jpeg文件以Segment的形式组织,均以0xFF开始,后面跟1 阅读详情
        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;
        }

 

Imatest SFRplus模块:自动化图像质量分析的全面指南 本文全面解析Imatest SFRplus模块在自动化图像质量分析中的应用,涵盖从测试准备到关键指标解读的全流程。SFRplus模块通过智能识别测试卡区域,大幅提升相机清晰度、色彩和畸变检测效率,特别适合相机研发、质检和摄影爱好者。文章详细介绍了MTF曲线、色差分析和批量测试等核心功能,帮助用户快速掌握这一强大的图像质量评估工具。 阅读详情

相关推荐

C#快速读取图片大小

根据图片格式定义,实现快速读取图的分辨率大小,支持 jpg、png、gif、bmp四种格式图片格式。此类未做全面测试,当遇到不能处理的图片,会用.Net自带的Iamage类进行读取。

C# 如何获得文件(图片)的大小

想了很多方法,最后看到网友使用了字节计算的方法,然后自己试了一下,和Windows上的一样,日常小技巧吧        /// &lt;summary&gt; /// 得到路径下文件的大小 MB /// &lt;/summary&gt; /// &lt;param name="path"&gt;&lt;/param&gt; /// &...

echoerror的博客 1万+

PCB工艺-SI9000-模型选择

本文介绍了PCB设计中常用的阻抗计算模型,主要包括外层、内层和嵌入式三类共12种计算模型,涵盖单端/差分、共面等不同场景。针对阻抗计算中的关键参数,文章提供了经验值参考:表层走线厚度0.035mm(1.4mil),内层0.0152mm(0.6mil);并列出常见PP材料的介电常数(3.8-4.5)和成品厚度(3-7.5mil)。作者建议90%的设计问题可通过上述模型解决,层叠参数建议咨询PCB厂家获取。

weixin_50120208的博客 1383

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

C# 快速获取图片大小以及分辨率(使用metadata-extractor) 官网:metadata-extractor官网 安装:PM> Install-Package MetadataExtractor 注:该控件功能很多,能获取图片的基本所有信息,且速度很快,这里只使用了获取照片的大小以及分辨率 由于软件需要频繁读取JPG文件的像素以及分辨率,早期使用Image类,这个就不说了,速度是惨不忍睹。后来使用SOF0段读取,速度快是快了,但是使用一段时间后发现如果PS保存照片的时候基线不对或者其他一些

zxpei的博客 2550

Tauri开发环境配置避坑指南:从Rust到Node.js的全流程实战

本文是一份详尽的Tauri开发环境配置实战指南,重点解析了从Rust工具链安装、Node.js版本管理到IDE配置的全流程。文章深入探讨了包管理器选择、依赖锁定、网络镜像加速等关键环节,并提供了开发与构建过程中典型问题的排查思路与解决方案,旨在帮助开发者高效避坑,顺利搭建跨平台桌面应用开发环境。

w3x4y的博客 292

Scissor算法实战:利用bulkRNA表型数据精准定位单细胞亚群

本文详细介绍了Scissor算法的实战应用,该算法通过整合bulkRNA-seq的丰富表型信息与单细胞数据,精准识别与特定临床结局(如不良预后)相关的单细胞亚群。文章深入解析了算法三步走的核心思想,并提供了适配Seurat v5的完整代码解决方案,帮助研究者从海量数据中提炼具有生物学和临床价值的洞见。

ww90123的博客 254

【转】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);        

qqqwwwwww的专栏 3480

告别SquareLine!用免费的NXP GUI-Guider为海思3516AV300开发LVGL界面(附完整移植流程)

本文详细介绍了如何利用免费的NXP GUI-Guider工具为海思Hi3516AV300开发LVGL界面,包括环境配置、代码移植和性能优化等全流程实战指南。特别针对二维码组件缺失等常见问题提供解决方案,帮助开发者零成本构建高效嵌入式GUI系统。

weixin_28292761的博客 415

cefsharp 网页另存为图片_年末台历季,图片转换、压缩一步到位!

2020即将过去岁末年初又是台历印制的高峰期还在为处理大量图片犯难吗?还在为PDF与JPG导出而烦恼吗?……今天小编就为您整理一份图片处理秘籍!话不多说上干货图片压缩最佳办法问题描述将图片上传到网络时,多会显示图片过大,如何压缩且不损害图片的清晰度?以笔者多年经验来看,在PS中进行调整(降低像素),会严重影响图片清晰度。以下图为例:工具:网络地址:https://imagecompres...

weixin_42314448的博客 414

Maven证书信任危机:PKIX path building failed的全面解析与实战修复

本文全面解析了Maven构建中常见的`PKIX path building failed`证书验证错误。该错误通常在使用特定镜像仓库或自建仓库时,因SSL/TLS证书不被JDK默认信任而触发。文章深入剖析了错误根源,对比了临时忽略检查与永久导入证书等不同修复方案的安全性与适用场景,并推荐通过`keytool`将证书导入JDK信任库的根治方法,以保障构建安全与稳定。

zzz56的博客 506

CanMV K230实战:用MicroPython玩转AI视觉识别(附完整代码)

本文详细介绍了如何使用MicroPython在CanMV K230开发板上实现AI视觉识别,包括环境搭建、摄像头配置、模型部署及优化技巧。通过实战案例(如智能门禁和工业分拣机器人),展示如何快速开发低门槛的嵌入式AI应用,特别适合初学者和嵌入式开发者。

x8y9z0的博客 1142

.net npoi xssfclientanchor设置图片缩放大小_【后期修图】PS的图像大小命令

请转到菜单栏中的“图像”菜单,然后选择“图像大小”。您也可以通过按Ctrl + Alt + I(Win)/Command + Option + I(Mac)从键盘打开它在Photoshop CC中,“图像大小”对话框在左侧显示预览窗口,以及用于查看和更改右侧图像大小的选项新图像预览窗口Adobe在Photoshop CC中重新设计了“图像大小”对话框,最大的变化是新的预览窗口。无论...

weixin_30995429的博客 2540

【AI实战】用Coze工作流打造抖音视频文案提取神器——从单链接到批量处理的进阶指南

本文详细介绍了如何利用Coze工作流打造抖音视频文案提取工具,从单链接处理到批量提取的进阶指南。通过AI技术和工作流的结合,用户可以高效提取抖音视频的ASR和OCR文本,大幅提升内容创作效率。文章还涵盖了性能优化、异常处理及实际应用场景扩展,助力开发者快速实现抖音文案自动化提取。

weixin_29210759的博客 279

获取图片大小

获取经过页面渲染的图片的大小 //图片加载完之后... $('#preview').on('load',function(){ //获取图片的宽度和高度 picWidth = $('#preview').width();//图片的宽度 picHeight = $('#preview').height();//图片的长度 })需要注意的是这段

Omeletteyang的博客 614

Unity插件NodeCanvas之行为树的详细教程

NodeCanvas 是一个用于 Unity 的可视化脚本工具,主要用于游戏开发中的行为树、状态机和流程图的设计。它通过节点编辑器的方式,让开发者可以更直观地创建和管理游戏逻辑,减少了传统编码的复杂性。今天我们就来详细介绍一下NodeCanvas插件。

TxNet 1956

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# 快速获得 图像大小

简单说来,就是用 Stream,这样不用把整个文件 Load 到 Image 里,自带的 API 接口里,估计会从流头里就得到 文件的大小了。对比了 Image.FromFile(file) 的方法,用流的方法,快了250倍。

voiue的博客 3177

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C# 获取图片宽与高

获取网络图片宽与高 获取本地图片宽与高

高级项目经理、专注于技术架构、分享项目管理及职场心得 6617

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

c#获取网络图片宽高,c#获取网上图片宽高,c#获取图片宽高,c#获取本地图片宽高

c#获取网络图片宽高,c#获取网上图片宽高,c#获取图片宽高,c#获取本地图片宽高

橙-极纪元-JJYCheng 1587

c# 图像读取几种方法

使用C#进行图像处理的几种方法 本文讨论了C#图像处理中Bitmap类、BitmapData类和unsafe代码的使用以及字节对齐问题。 Bitmap类 命名空间:System.Drawing 封装 GDI+ 位图,此位图由图形图像及其属性的像素数据组成。Bitmap 是用于处理由像素数据定义的图像的对象。  该类的主要方法和属性如下: 1.       GetPixel方法和 S

语帆的专栏 2902

C#快速获取图像尺寸和分辨率(使用MagickImage)

我感觉在优快云上写文章,我就和这个获取图片尺寸和分辨率杠上了 之前写过两篇文章,分别使用shell32文章链接和metadata-extractor文章链接来获取图像尺寸和分辨率,但是都不如人意。。 开始使用Image类,速度就不多说了。用过的人都知道,特别是大照片 然后使用SOF0段读取,但是会遇到很多图片尺寸读不出来(比如PS保存的时候基线选择连续) 接着使用metadata-extractor,读取尺寸没问题,但是遇到基线为连续的图片,速度惨不忍睹。比系统的Image类还慢 最后又使用shell32

zxpei的博客 8877
上一篇: lua元表详解
下一篇: Unity3D -- 质量设置(Quality Settings)
Le_Sam
博客等级 码龄11年 342粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值