C#處理JPEG頭信息的方法
曾經(jīng)有人給我了一張jpg,是1024*1024大小,文件大小為99kb,做了個(gè)金字塔,各層影像大小如下:?jiǎn)挝籯b
我生成的jpg金字塔 為經(jīng)過(guò)任何加工
height256 46.2kb
height512 162kb
height1024 557kb
Photoshop生成的jpg金字塔 為經(jīng)過(guò)任何加工
height256 48kb
height512 90kb
height1024 163kb
可以看出這個(gè)圖像大小差異太大了,我可是百思不得其解,最終看了上面那篇博文后,通過(guò)獲取元數(shù)據(jù)的方式來(lái)看看原因:
獲取元數(shù)據(jù)函數(shù)
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);
}
}
發(fā)現(xiàn)我生成的jpg和原始圖片的元數(shù)據(jù)是不同的
height1024:
ID:771,Length:1,Type:1; 頭信息Tag解釋?zhuān)?03 PropertyTagSRGBRenderingIntent
ID:769,Length:8,Type:5; 頭信息Tag解釋?zhuān)?01 PropertyTagGamma
ID:20752,Length:1,Type:1; 頭信息Tag解釋?zhuān)?110 PropertyTagPixelUnit 分辨率
ID:20753,Length:4,Type:4; 頭信息Tag解釋?zhuān)?111 PropertyTagPixelPerUnitX
ID:20754,Length:4,Type:4; 頭信息Tag解釋?zhuān)?112 PropertyTagPixelPerUnitY
height:
ID:20625,Length:128,Type:3;頭信息Tag解釋?zhuān)?091 PropertyTagChrominanceTable
ID:20624,Length:128,Type:3; 頭信息Tag解釋?zhuān)?090 PropertyTagLuminanceTable
原來(lái)如此,這樣我們就知道為什么jpg竟然不一樣大小了,那好吧,我就修改了生成了影像金字塔的方法:在保存金字塔之前,把他們的頭信息去掉。之后驚奇的發(fā)現(xiàn):我生成的影像金字塔的最精細(xì)層和原始圖像一樣大小了!。
去除影像元數(shù)據(jù)的方法:
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");
}
相關(guān)文章
C#編寫(xiě)Windows服務(wù)實(shí)例代碼
本篇文章主要介紹使用Microsoft Visual Studio2012可以很方便的創(chuàng)建一個(gè)Windows服務(wù),本例實(shí)現(xiàn)一個(gè)向D盤(pán)的txt文件里,寫(xiě)入系統(tǒng)時(shí)間的Windows服務(wù)2013-10-10
詳解C#如何解決程序卡頓的問(wèn)題(多線(xiàn)程初步學(xué)習(xí))
在編寫(xiě)程序的時(shí)候,有時(shí)候難免會(huì)出現(xiàn)后臺(tái)運(yùn)行時(shí)間過(guò)長(zhǎng)的問(wèn)題,這個(gè)時(shí)候就要考慮多線(xiàn)程的操作了,所以本文給大家介紹了C#解決程序卡頓問(wèn)題的方法,需要的朋友可以參考下2024-04-04
unity 切換場(chǎng)景不銷(xiāo)毀物體問(wèn)題的解決
這篇文章主要介紹了unity 切換場(chǎng)景不銷(xiāo)毀物體問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
C#中的自動(dòng)類(lèi)型轉(zhuǎn)換和強(qiáng)制類(lèi)型轉(zhuǎn)換
這篇文章主要介紹了C#中的自動(dòng)類(lèi)型轉(zhuǎn)換和強(qiáng)制類(lèi)型轉(zhuǎn)換,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-08-08
c# 執(zhí)行動(dòng)態(tài)編譯的方法實(shí)例詳解
在C#中執(zhí)行動(dòng)態(tài)編譯的一種方法是使用 CSharpCodeProvider 類(lèi),這篇文章主要介紹了c# 執(zhí)行動(dòng)態(tài)編譯的方法,需要的朋友可以參考下2024-03-03
C#開(kāi)發(fā)Windows服務(wù)實(shí)例之實(shí)現(xiàn)禁止QQ運(yùn)行
這篇文章主要介紹了通過(guò)C#開(kāi)發(fā)Windows服務(wù),查殺qq進(jìn)程的服務(wù)功能,需要的朋友可以參考下2013-10-10

