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

C#处理JPEG头信息的方法

    来源: 互联网  发布时间:2014-10-19

    本文导语:  曾经有人给我了一张jpg,是1024*1024大小,文件大小为99kb,做了个金字塔,各层影像大小如下:单位kb 我生成的jpg金字塔  为经过任何加工 height256    46.2kb height512    162kb height1024   557kb Photoshop生成的jpg金字塔  为经过任何...

曾经有人给我了一张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 

原来如此,这样我们就知道为什么jpg竟然不一样大小了,那好吧,我就修改了生成了影像金字塔的方法:在保存金字塔之前,把他们的头信息去掉。之后惊奇的发现:我生成的影像金字塔的最精细层和原始图像一样大小了!。

去除影像元数据的方法:

代码如下:

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");

}


    
 
 

您可能感兴趣的文章:

  • Web服务器/前端 iis7站长之家
  • 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#图片处理之图片裁剪成不规则图形
  • C# 事件处理学习心得
  • C#实现对Json字符串处理实例
  • 哈希表处理冲突的方法
  • firefox下jquery ajax返回object XMLDocument处理方法
  • linux忘记mysql密码处理方法
  • jsp中URL传递中文参数的处理方法
  • 违例处理问题1:是不是每个java方法都要有throws Exception子句呢?什么时候必须用?
  • ASP.NET 回发密码框清空问题处理方法
  • MSSQL附加数据库拒绝访问提示5120错误的处理方法
  • 错误日志文件的处理方法?
  • win7系统下 vs2010 调式就关闭要重启处理方法
  • destoon出现验证码不显示时的紧急处理方法
  • 请问有没有好的方法(模式)处理这样的问题????
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • c/c++预处理命令预#error介绍
  • 关于linux内核中信号处理的问题?(信号处理的时间)
  • c/c++预处理命令预#undef介绍
  • 如何让批处理文件执行完毕后窗口不关闭,批处理文件直接点击执行
  • c/c++预处理命令预#pragma介绍
  • 视频处理问题,用批处理对视频进行打码
  • c/c++预处理命令预#line介绍
  • 请问如何在unix批处理中得到批处理参数!read吗?急在线等待!
  • c/c++预处理命令预#include介绍
  • 在linux上怎么编写一个模块来提供某个中断的中断处理程序呢?而且有哪些中断可以自己添加中断处理程序呢?
  • Python 3 Tkinter教程之事件Event绑定处理代码实例
  • 信号处理函数里面用CRT函数可能导致"信号触发-处理"死循环吗?
  • c/c++预处理命令预#,##使用介绍
  • 我想编一个把javac和java连起来用的批处理文件,请批处理文件中的参数怎么表示?
  • c/c++预处理命令预#if, #ifdef, #ifndef, #else, #elif, #endif介绍
  • 为何信号处理没有及时被处理呢?
  • c/c++预处理命令预#define语法和例子
  • 在编写驱动程序的时候,timer处理中,遇到了其他某timer处理例程以外的代码的执行。请指点,各位
  • c/c++预处理命令之预定义变量
  • 我准备做个批处理文件来删除某文件夹下后缀为Txt的文件,可系统一次执行不完,还要手动敲一个回车,怎么处理?
  • Python异常处理基础知识
  • 批量处理JDBC语句提高处理速度


  • 站内导航:


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

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

    浙ICP备11055608号-3