当前位置:  编程技术>.net/c#/asp.net

C#处理JPEG头信息的实例详解

    来源: 互联网  发布时间:2014-08-30

    本文导语:  一张jpg图片,1024*1024的尺寸,文件大小为99kb,金字塔效果,各层影像大小如下:单位kb 生成未经过加工处理的jpg金字塔:   height256 46.2kb height512 162kb height1024 557kb Photoshop生成的jpg金字塔,也是未经过任何加工:   height256 48kb...

一张jpg图片,1024*1024的尺寸,文件大小为99kb,金字塔效果,各层影像大小如下:单位kb

生成未经过加工处理的jpg金字塔:
 

height256 46.2kb
height512 162kb
height1024 557kb

Photoshop生成的jpg金字塔,也是未经过任何加工:
 

height256 48kb
height512 90kb
height1024 163kb

可以看出图像大小差异太大了,要看出其中的分别,只能获取元数据。

函数如下:
 

代码示例:

public void GetProperty()
{
Bitmap myImage1024 = new Bitmap(@"E:myjpgheight.jpg");

foreach (PropertyItem property in myImage1024.PropertyItems)
{

StringBuilder sb=new StringBuilder();

Byte[] sbbyte = (Byte[])property.Value;

sb.AppendFormat("ID:{0},Length:{1},Type:{2};n",

property.Id.ToString(), property.Len.ToString(), property.Type.ToString(),);

Console.Write(sb);
}

}

发现生成的jpg和原始图片的元数据是不同的
height1024:

ID:771,Length:1,Type:1; 头信息Tag解释:303 PropertyTagSRGBRenderingIntent

ID:769,Length:8,Type:5; 头信息Tag解释:301 PropertyTagGamma

ID:20752,Length:1,Type:1; 头信息Tag解释:5110 PropertyTagPixelUnit 分辨率

ID:20753,Length:4,Type:4; 头信息Tag解释:5111 PropertyTagPixelPerUnitX

ID:20754,Length:4,Type:4; 头信息Tag解释:5112 PropertyTagPixelPerUnitY

height:

ID:20625,Length:128,Type:3;头信息Tag解释:5091 PropertyTagChrominanceTable

ID:20624,Length:128,Type:3; 头信息Tag解释:5090 PropertyTagLuminanceTable

修改生成了影像金字塔的方法:在保存金字塔之前,把头信息去掉。
之后发现:生成的影像金字塔的最精细层和原始图像一样大小了!。

去除影像元数据的方法:
 

代码示例:

public void RemoveProperty()

{

Bitmap myImage1024 = new Bitmap(@"E:myjpgheight.jpg");

foreach (PropertyItem property in myImage1024.PropertyItems)

{

myImage1024.RemovePropertyItem(property.Id);

}

myImage1024.Save(@"E:myjpgnopro.jpg");

}

附,图片文件头表示图片类型的部分:
1.JPEG
- 文件头标识 (2 bytes): 0xff, 0xd8 (SOI) (JPEG 文件标识)
- 文件结束标识 (2 bytes): 0xff, 0xd9 (EOI)

2.TGA
- 未压缩的前5字节    00 00 02 00 00
- RLE压缩的前5字节   00 00 10 00 00

3.PNG
- 文件头标识 (8 bytes)   89 50 4E 47 0D 0A 1A 0A

4.GIF
- 文件头标识 (6 bytes)   47 49 46 38 39(37) 61
G    I   F   8    9 (7)   a

5.BMP
- 文件头标识 (2 bytes)   42 4D
 B  M

6.PCX
- 文件头标识 (1 bytes)   0A

7.TIFF
- 文件头标识 (2 bytes)   4D 4D 或 49 49

8.ICO
- 文件头标识 (8 bytes)   00 00 01 00 01 00 20 20

9.CUR
- 文件头标识 (8 bytes)   00 00 02 00 01 00 20 20

10.IFF
- 文件头标识 (4 bytes)   46 4F 52 4D
 F   O  R  M

11.ANI
- 文件头标识 (4 bytes)   52 49 46 46
 R   I    F   F


    
 
 

您可能感兴趣的文章:

  • C# 执行bat批处理文件的小例子
  • c# URL参数传递时包含“&”符号的处理方法
  • C#事件处理和委托event delegate实例简述
  • c# 调用批处理(bat)的实现代码
  • C# WinForm窗体编程中处理数字的正确操作方法
  • C#中执行批处理文件(*.bat)的方法代码
  • C#控制台程序中处理2个关闭事件的代码实例
  • C#事务处理(Execute Transaction)实例解析
  • c#异常处理示例分享
  • c#实现sqlserver事务处理示例
  • C# datatable 不能通过已删除的行访问该行的信息处理方法
  • C#异常处理的一些经验和技巧
  • C#异常处理详解
  • C# Socket粘包处理讲解示例
  • C# WinForm捕获未处理的异常实例解析
  • c# 批处理调用方法(实例)
  • C# 批处理调用方法
  • C#处理JPEG头信息的方法
  • c#图片处理之图片裁剪成不规则图形
  • C# 事件处理学习心得
  • MySQL数据入库时特殊字符处理详解
  • Sql Server使用cursor处理重复数据过程详解
  • php事务处理实例详解
  • 深入Android SQLite 事务处理详解
  • 解析jdbc处理oracle的clob字段的详解
  • PHP图片处理类 phpThumb参数用法详解
  • 深入分析C#中处理和键盘相关事件的详解
  • php中pdo错误处理方法详解
  • 解析使用jdbc,hibernate处理clob/blob字段的详解
  • C++之异常处理详解
  • 基于JAVA中Jersey处理Http协议中的Multipart的详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python 3 Tkinter教程之事件Event绑定处理代码实例
  • Python 时间处理datetime实例
  • C语言二维数组的处理实例
  • JS异常处理try..catch语句的作用和实例
  • PHP按行读取、处理较大CSV文件的代码实例
  • PHP处理SQL脚本文件导入到MySQL的代码实例
  • C++的try块与异常处理及调试技术实例解析
  • Android应用中Back键的监听及处理实例
  • Python getopt模块处理命令行选项实例
  • Android通过手势实现的缩放处理实例代码
  • PHPThumb图片处理实例
  • PHPThumb图片处理实例解析
  • php如何模拟处理http put请求?实例教程
  • js与php对url编码处理实例
  • Android 图片特效处理的方法实例
  • 从零学python系列之数据处理编程实例(一)
  • Android图片处理:识别图像方向并显示实例教程
  • Shell中处理包含空格的文件名实例
  • Shell脚本处理浮点数的运算和比较实例
  • C#中csv文件与DataTable互相导入处理实例解析
  • c#处理3种json数据的实例
  • c/c++预处理命令预#error介绍
  • 关于linux内核中信号处理的问题?(信号处理的时间)
  • c/c++预处理命令预#undef介绍
  • 如何让批处理文件执行完毕后窗口不关闭,批处理文件直接点击执行
  • c/c++预处理命令预#pragma介绍
  • 视频处理问题,用批处理对视频进行打码
  • c/c++预处理命令预#line介绍
  • 请问如何在unix批处理中得到批处理参数!read吗?急在线等待!
  • c/c++预处理命令预#include介绍
  • 在linux上怎么编写一个模块来提供某个中断的中断处理程序呢?而且有哪些中断可以自己添加中断处理程序呢?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3