gpt4 book ai didi

java - 将 Base64 图像与 InputStream 进行比较

转载 作者:行者123 更新时间:2023-12-02 05:58:52 26 4
gpt4 key购买 nike

我正在 jUnit 测试我的 Android 应用程序。在 setUp() 上,我创建了 3 个联系人,其中两个有一张照片。第一个插入的联系人和最后插入的联系人都有照片。联系人信息以 JSON 对象 形式接收,其中图像采用 base64 编码。

我 95% 确定这两张图片是相同的,我只是使用 an online decoder 对其进行了解码我得到了我所期待的图像。

tearDown() 上,我将删除联系人。

我陷入了某种特定的方法。这个:

public void testGetContactPhotoInputStream() {

try {
String photoBase64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeIAAAC2CAIAAACK4xmhAAAABmJLR0Q(...)";
String rawContactId = getAllRawContactIds().get(0);

photo.setRawContactId(rawContactId);

InputStream isExpected = photo.getContactPhotoInputStream();

InputStream isActual = new ByteArrayInputStream(Base64.decode(photoBase64.getBytes(), Base64.DEFAULT));

assertTrue(IOUtils.contentEquals(isExpected, isActual));

} catch (IOException e) {
e.printStackTrace();
fail("Exception: " + e.getMessage());
}
}

正在从 Photo 类测试此方法。

public InputStream getContactPhotoInputStream() throws IOException {
Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(mRawContactId));
InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, uri);

return is;
}

我确信这些照片是相同的,因为 base64 编码是接收到的 JSON 内的字符串。

我尝试过:

String photoBase64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeIAAAC2CAIAAACK4xmhAAAABmJLR0QA/wD/AP(...)";

并且没有“data:image/png...”的初始部分,如下所示:

String photoBase64 = "iVBORw0KGgoAAAANSUhEUgAAAeIAAAC2CAIAAACK4xmhAAAABmJLR0QA/wD/AP(...)";

仍然得到失败的断言。

这是我的断言输出:

junit.framework.AssertionFailedError
at com.pedro.notesquirrel.test.PhotoTest.testGetContactPhotoInputStream(PhotoTest.java:178)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)

我认为问题出在转换为 InputStream 上,但我没有看到断言失败的任何原因。

有什么帮助吗?

PS;为了便于阅读,我删除了大部分 photoBase64 字符串。

////////////////////////////编辑////////////////////////////////

根据 Joop Eggen 评论,这是我的代码:

public void testGetContactPhotoInputStream() {
try {

String photoBase64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeIAAAC2CAIAAACK4xmhAAA(...)";
String contactId = getAllContactIds().get(0);
String rawContactId = contact.getAllRawContactIdsBelongingToGivenContactId(contactId).get(0);

photo.setRawContactId(rawContactId);

photoBase64 = photoBase64.replaceFirst("^.*;base64,", "");
Log.d(TAG, "Data: " + photoBase64);
byte[] bytes = Base64.decode(photoBase64, Base64.DEFAULT);

InputStream isActual = new ByteArrayInputStream(bytes);
InputStream isExpected = photo.getContactPhotoInputStream();

assertTrue(IOUtils.contentEquals(isExpected, isActual));

} catch (IOException e) {
e.printStackTrace();
fail("Exception: " + e.getMessage());
}
}

最佳答案

“data:image/png;base64,”部分不属于真正的Base64数据。

String base64Text = photoBase64.replaceFirst("^.*,", "");
byte[] bytes = Base64.decode(base64Text , Base64.DEFAULT);

关于java - 将 Base64 图像与 InputStream 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22843417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com