在Android中,当从手机上的照片解码位图时,原始中的EXIF数据会丢失.我通过套接字将此Bitmap发送到我的服务器,并希望将丢失的EXIF数据重新附加到正在发送的数据.
我有一些代码从MediaStore加载一个Bitmap对象并将其压缩为一个字节数组,以准备通过套接字发送它:
Bitmap bitmap = ...
ByteArrayOutputStream stream = new ByteArrayOutputStream(bitmap);
bitmap.compress(CompressFormat.JPEG, 70, stream);
byte[] input = stream.toByteArray();
Run Code Online (Sandbox Code Playgroud)
我想使用ExifInterface来获取SD卡上原始jpeg中的EXIF元数据,并以某种方式将其添加到传出的字节数组中,以便我能够在服务器上提取具有所有正确EXIF的jpeg (希望不在服务器上这样做).到目前为止,我设法使用ExifInterface读取所有EXIF数据:
String path = ... //bitmap file path
ExifInterface exif = new ExifInterface(path);
... = exif.getAttribute(...)
Run Code Online (Sandbox Code Playgroud)
编辑:最理想的是,我想找到一个不使用库的解决方案.如果我能得到包含EXIF的原始jpeg的字节数组的索引,并将这些字节前置/附加到由此产生的字节数组中,Bitmap那将是最好的.
工作代码:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, 100, bos); //Bitmap object is your image
byte[] data = bos.toByteArray();
TiffOutputSet outputSet = null;
IImageMetadata metadata = Sanselan.getMetadata(new File(filepath)); // filepath is the path to your image file stored in SD card (which contains exif info)
JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
if (null != jpegMetadata)
{
TiffImageMetadata exif = jpegMetadata.getExif();
if (null != exif)
{
outputSet = exif.getOutputSet();
}
}
if (null != outputSet)
{
bos.flush();
bos.close();
bos = new ByteArrayOutputStream();
ExifRewriter ER = new ExifRewriter();
ER.updateExifMetadataLossless(data, bos, outputSet);
data = bos.toByteArray(); //Update you Byte array, Now it contains exif information!
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8305 次 |
| 最近记录: |