• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    flex压缩图片exif信息(作者/相机)丢失问题解决
    在用flex的jpegencoder对图片进行压缩的时候,exif信息会丢失,也就是图片的作者,用的相机,神马的,全部都没有了,怎么办呢?

    经研究jpeg的文档,最终解决这个问题
    1.jpeg的文件格式,分成一个一个frame,每个frame以0xFF打头,然后跟着一个标识未,比如0xFFD8表示文件的开始,0xFFD9表示文件结束,紧接着标识位的是这个frame的长度,长度不包括0xFF和标识位,但包括这个2个字节的长度,比如一个frame开始了,先是一个0xFF然后是一个0xXX,然后是两个0x0010,说明这个frame的长度是16,整个frame的长度其实是18,

    2.我们要研究的是图片的exif信息,他的标识位是0xE1
    而且这个0xE1有两种情况,第一种,就是紧跟着文件头,就是0xE1,第二种,就是在0xE1之前还有一个0xE0,
    所以在把这个byteArray在如到图片对象之前,先要获取到这个0xE1的frame的所有数据,代码如下:
    复制代码 代码如下:

    //获取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; //读取第四个字节
    var exif:Number = tempData.readUnsignedByte();
    if(exif == 0xE1) { //看这个字节是不是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里
    代码的逻辑应该一目了然的,嘿嘿
    复制代码 代码如下:

    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);
    }
    您可能感兴趣的文章:
    • Python读取图片EXIF信息类库介绍和使用实例
    • PHP实现显示照片exif信息的方法
    • PHP exif扩展方法开启详解
    • python通过pil模块获得图片exif信息的方法
    • python用来获得图片exif信息的库实例分析
    • Java读取图片EXIF信息的方法
    • PHP获取Exif缩略图的方法
    • iOS开发中用imageIO渐进加载图片及获取exif的方法
    • Android开发之使用ExifInterface获取拍照后的图片属性
    • Android下的EXIF是什么
    上一篇:Flex帮助文档(html格式)制作及ASDoc的使用
    下一篇:flex项目中server的名称修改方法探讨
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    flex压缩图片exif信息(作者/相机)丢失问题解决 flex,压缩,图片,exif,信息,