Я использую java .util.Base64 для кодирования нескольких изображений в строку переднего плана. Большинство изображений PNG работают, я могу преобразовать результат строки Base64 обратно в изображение с помощью онлайн-преобразования. Но файлы JPG как-то повреждены.
Я скопировал свою закодированную строку JPG base64 в онлайн-конвертер, который не может отобразить изображение. Затем я скачал это изображение на свой местный. Когда я пытаюсь открыть это изображение, зритель говорит:
Ошибка интерпретации файла изображения JPEG (не JPEG-файла: начинается с 0x99 0xaf)
Is Есть ли другой способ, которым я могу закодировать изображение JPG в строку и отправить его внешнему интерфейсу, чтобы внешний интерфейс мог отображать это изображение? Предполагается, что Base64 сейчас не работает для JPG.
Онлайн-конвертер говорит:
MIME файла был обнаружен как «application / octet-stream», но декодер отображает его как «image / octet-stream».
Предварительный просмотр Ваш браузер не может отобразить файл как «image / octet-stream».
Информация о файле • MIME-тип: image / octet-stream • Расширение: bin • Размер: 4 КБ • Загрузить: image.bin
private Map<String, String> download(byte[] output) throws IOException, ScriptException {
try (ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(output))) {
ZipEntry zipEntry = zis.getNextEntry();
byte[] buffer = new byte[4096];
Map<String, String> mapTable = new HashMap<>();
int len;
while (zipEntry != null) {
String zipEntryName = zipEntry.getName();
if (zipEntryName != null) {
if (zipEntryName.endsWith(".png") || zipEntryName.endsWith(".jpg")) {
String encodeImage = "";
while ((len = zis.read(buffer)) > 0) {
encodeImage = java.util.Base64.getEncoder().withoutPadding().encodeToString(buffer);
}
mapTable.put(zipEntryName, encodeImage);
} else {
StringBuilder sb = new StringBuilder();
log.info("File Name " + zipEntryName);
while ((len = zis.read(buffer)) > 0) {
sb.append(new String(buffer, 0, len));
}
String dataStr = sb.toString();
mapTable.put(zipEntryName, dataStr);
}
}
zipEntry = zis.getNextEntry();
}
zis.closeEntry();
return mapTable;
} catch (IOException ioe) {
log.error("IOException {}", ioe);
throw ioe;
}
}