C#处理JPEG头信息的方法

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

}

(0)

相关推荐

  • C#处理JPEG头信息的方法

    曾经有人给我了一张jpg,是1024*1024大小,文件大小为99kb,做了个金字塔,各层影像大小如下:单位kb 我生成的jpg金字塔  为经过任何加工 height256    46.2kb height512    162kb height1024   557kb Photoshop生成的jpg金字塔  为经过任何加工 height256    48kb height512    90kb height1024   163kb 可以看出这个图像大小差异太大了,我可是百思不得其解,最终看了上面

  • PHP设置头信息及取得返回头信息的方法

    本文实例讲述了PHP设置头信息及取得返回头信息的方法.分享给大家供大家参考,具体如下: 设置请求的头信息,我们可以用header函数,可以用fsockopen,可以用curl等,本文主要讲的是用curl来设置头信息,并取得返回后的头信息. 一.请求方设置自己的头信息,header.php <?php function FormatHeader($url, $myIp = null,$xml = null) { // 解悉url $temp = parse_url($url); $query =

  • PHP使用file_get_content设置头信息的方法

    本文实例讲述了PHP使用file_get_content设置头信息的方法.分享给大家供大家参考,具体如下: 直接上代码: <?php /** Accept application/json Accept-Encoding gzip, deflate Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Connection keep-alive Cookie mzys_is_frist_access=1; mzys_c_uuid=guest_21

  • PHP获取短链接跳转后的真实地址和响应头信息的方法

    获取到一个短连接,需要将短连接转换成真实的网址,通过查资料,发现 PHP 提供了一个函数 get_headers() ,可以完成这个任务,先把 头部信息获取到,然后再分析跳转地址即可: 复制代码 代码如下: $url = 'http://t.cn/h5mwx'; $headers = get_headers($url, TRUE); print_r($headers); //输出跳转到的网址 echo $headers['Location']; 附完整数组: 复制代码 代码如下: Array (

  • php通过获取头信息判断图片类型的方法

    本文实例讲述了php通过获取头信息判断图片类型的方法.分享给大家供大家参考.具体实现方法如下: $filename = '617.gif' ; function pictype ( $file ) { /*$png_header = "/x89/x50/x4e/x47/x0d/x0a/x1a/x0a"; $jpg_header = "/xff/xd8";*/ $header = file_get_contents ( $file , 0 , NULL , 0 , 5

  • php查看请求头信息获取远程图片大小的方法分享

    如果要获取远程图片的大小,一种普遍的做法是先将远程图片的内容获取回来,再用strlen计算长度,这种方法需要将图片下载下来,然后才能计算.如果图片很大的话,那么网络传输就要花费不少时间,效率显然低下.笔者提供一个方法来提高效率,主要是利用http的头信息. 当访问网页的时候,服务器会返回请求的头信息,其中Content-Length表示请求的网页内容大小.如果请求的是图片,那么Content-Length就表示图片的大小.根据这个,只需要发送head请求获取返回的头信息就OK了.在php中,可以

  • Android中Webview打开网页的同时发送HTTP头信息方法

    众所周知,当你点击一个超链接进行跳转时,WebView会自动将当前地址作为Referer(引荐)发给服务器,因此很多服务器端程序通过是否包含referer来控制盗链,所以有些时候,直接输入一个网络地址,可能有问题,那么怎么解决盗链控制问题呢,其实在webview加载时加入一个referer就可以了,如何添加呢? 从Android 2.2 (也就是API 8)开始,WebView新增加了一个接口方法,就是为了便于我们加载网页时又想发送其他的HTTP头信息的. 复制代码 代码如下: public v

  • 在AngularJs中设置请求头信息(headers)的方法及不同方法的比较

    在AngularJs中有三种方式可以设置请求头信息: 1.在http服务的在服务端发送请求时,也就是调用 http服务的在服务端发送请求时,也就是调用 http()方法时,在config对象中设置请求头信息:事例如下: $http.post('/somePath' , someData , { headers : {'Authorization' : authToken} }).success(function(data, status, headers, config) { //... }).

  • Django Python 获取请求头信息Content-Range的方法

    request请求头信息的键会加上HTTP_转换成大写存到request.META中 因此你只需要 content_range = request.META['HTTP_CONTENT_RANGE'] 这样就可以获取到Content-Range的信息. django官网的解释: A standard Python dictionary containing all available HTTP headers. Available headers depend on the client and

  • php的curl携带header请求头信息实现http访问的方法

    导读: curl请求时添加请求头信息可以模拟真人操作,不容易被当成是爬虫机器人(采集),从而可以绕过Incapsula等安全验证机制. 1.首先使用浏览器(示例使用的是火狐浏览器)访问接口网址,使用F12调试,查看请求头信息,如下: 2.实现代码: <?php /** * 开始访问请求 * @param $url * @return bool|string */ function fetch_url($url) { $header = FormatHeader($url); $useragent

随机推荐