插入和更新时,联系人图片的大小会发生变化



我在插入或更新联系人图片时遇到问题。 似乎Android压缩了图片。

为了进行测试,我创建了一个 200 x 200 像素的 PNG,并将其保存在内部应用程序存储中。

字节 [] 的大小为 52490。

但是联系人图片的大小(高分辨率(始终为 6767 字节。

在HTC U11(Android 9(和Sony Xperia(Android 8(上进行测试

从内部存储读取映像:

byte[] readPicture(String filename) {
FileInputStream in = null;
byte[] result = null;
try {
in = context.openFileInput(filename);
result = new byte[in.available()];
int read = in.read(result);
Log.d("FileUtil", read + " bytes read from " + filename);
} catch (Exception e) {
e.printStackTrace();
} finally {
closeStream(in);
}
return result;
}

将图片插入特定联系人:

picture = readPicture(filename);
ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withYieldAllowed(true);
builder.withValue(ContactsContract.Data.CONTACT_ID, contactId);
builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
builder.withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
builder.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, picture);
ops.add(builder.build());

加载全尺寸联系人图片:

// contact.getContactId() == ContactsContract.Data.CONTACT_ID
// contact.getLookup() == ContactsContract.Data.LOOKUP_KEY
ContactsContract.Contacts.getLookupUri(Long.parseLong(contact.getContactId()), contact.getLookup());
InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri, true);
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] result = null;
if (is != null) {
byte[] buffer = new byte[4096];
int length;
try {
while ((length = is.read(buffer)) != -1) {
os.write(buffer, 0, length);
}
result = os.toByteArray();
} catch (Exception ignored) {
return null;
} finally {
FileUtil.closeStream(is);
FileUtil.closeStream(os);
}
}
return result;

我想我做错了什么,但我不知道是什么。

你不需要在下面的代码中循环读取吗:

while(in.available()>0){
result = new byte[in.available()];
int read = in.read(result);
//or better make a loop until in.read(readBytes[])!=-1
Log.d("FileUtil", read + " bytes read from " + filename);
}

最新更新