zoukankan      html  css  js  c++  java
  • C#处理JPEG头信息的方法

    C#处理JPEG头信息的方法-
    发布:shangke 字体:[增加 减小] 类型:转载

    相信大家肯定都看过用C或C++处理JPEG头信息的程序了,我也看了,不过因为我不懂C,看得我头疼。所以我还是决定用C#来写吧
    -
    曾经有人给我了一张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:\myjpg\height.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:\myjpg\height.jpg");

    foreach (PropertyItem property in myImage1024.PropertyItems)

    {

    myImage1024.RemovePropertyItem(property.Id);

    }

    myImage1024.Save(@"E:\myjpg\nopro.jpg");

    }

    详细出处参考:http://www.jb51.net/article/36651.htm

  • 相关阅读:
    vue学习之vuex的入门
    Vue的入门之安装
    JS之作用域链
    map去重value值
    增量部署和全量部署
    js跳转页面的方法
    Quartz定时任务时间设置
    @RequestParam和@PathVariable用法小结
    nginx负载均衡的5种策略(转载)
    使用Joda-Time优雅的处理日期时间
  • 原文地址:https://www.cnblogs.com/xianyin05/p/3075642.html
Copyright © 2011-2022 走看看