国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Flex > 正文

flex壓縮圖片exif信息(作者/相機)丟失問題解決

2024-09-08 18:16:56
字體:
供稿:網(wǎng)友
在用flex的jpegencoder對圖片進行壓縮的時候,exif信息會丟失,也就是圖片的作者,用的相機,神馬的,全部都沒有了,怎么辦呢?

經(jīng)研究jpeg的文檔,最終解決這個問題
1.jpeg的文件格式,分成一個一個frame,每個frame以0xFF打頭,然后跟著一個標識未,比如0xFFD8表示文件的開始,0xFFD9表示文件結(jié)束,緊接著標識位的是這個frame的長度,長度不包括0xFF和標識位,但包括這個2個字節(jié)的長度,比如一個frame開始了,先是一個0xFF然后是一個0xXX,然后是兩個0x0010,說明這個frame的長度是16,整個frame的長度其實是18,

2.我們要研究的是圖片的exif信息,他的標識位是0xE1
而且這個0xE1有兩種情況,第一種,就是緊跟著文件頭,就是0xE1,第二種,就是在0xE1之前還有一個0xE0,
所以在把這個byteArray在如到圖片對象之前,先要獲取到這個0xE1的frame的所有數(shù)據(jù),代碼如下:

復(fù)制代碼 代碼如下:


//獲取0xFFE1 app1也就是exif信息
var tempData:ByteArray = new ByteArray();
//這里的e.target.data是圖片的原始byteArray
tempData.writeBytes(e.target.data,0,e.target.data.bytesAvailable);
tempData.position = 3; //讀取第四個字節(jié)
var exif:Number = tempData.readUnsignedByte();
if(exif == 0xE1) { //看這個字節(jié)是不是0xE1
this.Debug("有exif信息");
//讀一個長度
var exifLength:Number = tempData.readUnsignedShort();
file_item.exifArray.writeBytes(tempData,tempData.position-2,exifLength); //如果是,將exif信息讀入一個文件對象
} else if(exif == 0xE0) { //是e0,那么跳過這個frame,看下邊
tempData.position = 4;
var e0Length:Number = tempData.readUnsignedShort();
tempData.position = 4+e0Length;//跳過e0
tempData.position += 1;//跳過0xff
var isEx:Number = tempData.readUnsignedByte();
if(isEx==0xE1) {
var len:Number = tempData.readUnsignedShort();
file_item.exifArray.writeBytes(tempData,tempData.position-2,len);
}
}


然后處理完了這些,我們就需要把這段frame給插到壓縮之后的byteArray里
代碼的邏輯應(yīng)該一目了然的,嘿嘿

復(fù)制代碼 代碼如下:


if(file_item.exifArray.length>0) { //寫入exif信息
var desData:ByteArray = new ByteArray();
desData.writeBytes(oldData,0,2);//0xffd8
desData.writeByte(0xff);
desData.writeByte(0xe1);
desData.writeBytes(file_item.exifArray,0,file_item.exifArray.bytesAvailable);
desData.writeBytes(oldData,2,oldData.bytesAvailable);
desData.position = 0;
this.uploadFileTest(desData,file_item);
} else {
this.uploadFileTest(e.target.ba,file_item);
}

(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 呈贡县| 靖江市| 惠州市| 永平县| 白玉县| 房山区| 镇宁| 呼伦贝尔市| 太和县| 六盘水市| 久治县| 额敏县| 嫩江县| 嵊州市| 新昌县| 天长市| 仪征市| 美姑县| 即墨市| 漳州市| 噶尔县| 永泰县| 沈丘县| 舟曲县| 游戏| 静安区| 新龙县| 庆阳市| 类乌齐县| 横山县| 和硕县| 多伦县| 三明市| 疏勒县| 鲁山县| 肃南| 榆树市| 绥宁县| 株洲县| 花垣县| 文登市|