В настоящее время я разрабатываю небольшую оболочку для библиотеки экстрактора метаданных, чтобы иметь возможность доступа к нескольким атрибутам метаданных в JPEG из кода ColdFusion.Данные JPEG поступают в ColdFusion из конечной точки REST в виде строки base64.Я хотел преобразовать эту строку в байтовый массив и прочитать метаданные Exif из JPEG, вернув исходную дату создания в ColdFusion в виде строки.Однако я не могу прочитать блок Exif из преобразованного байтового массива.
Я попытался использовать java.utils.Base64 и javax.xml.bind.DatatypeConverter для преобразования base64, но в обоих случаяхИзвлечение метаданных не может найти данные Exif.Я открыл исходное исходное изображение в шестнадцатеричном редакторе и данные Exif присутствуют.Я также попытался использовать metadata-extractor для исходного файла изображения, и это работало нормально, заголовки Exif присутствовали, когда я распечатывал каталоги и теги.
Это конструктор для класса, который я использую для чтенияметаданные:
public ImageMetaDataReader(String base64ImageData) throws IOException, ImageProcessingException {
// create the image object from the provided string data
byte [] imageBytes = java.util.Base64.getDecoder().decode(base64ImageData);
javax.xml.bind.DatatypeConverter.parseBase64Binary(lexicalXSDBase64Binary)
ByteArrayInputStream imageBytesReader = new ByteArrayInputStream(imageBytes);
fileMetaData = JpegMetadataReader.readMetadata(imageBytesReader);
imageBytesReader.reset();
// read the exif data as well
exifMetaData = ImageMetadataReader.readMetadata(new ByteArrayInputStream(imageBytes), imageBytes.length, FileType.Jpeg);
return;
}
Я также безуспешно пытался использовать ExifReader напрямую, но получал неясное различие между порядком байтов intel и motorola в исключении.
Когда я запускаюкод против исходного изображения, я получаю все заголовки файлов, данные Exif и все другие теги, которые фактически присутствуют в данных JPEG.Когда я запускаю ее со строкой base64, как показано в конструкторе, я получаю несколько каталогов JPEG, несколько каталогов JFIF и каталог таблиц Хаффмана, ничего больше.
Я подозреваю, что где-то во время преобразования порядок байтовпортится из-за исключения, которое я получил выше, но я не совсем уверен, что делать, чтобы его решить.Единственное решение, которое я могу придумать, - это записать данные JPEG во временный файл, а затем прочитать их обратно, но я бы не стал этого делать, если есть лучшее работоспособное решение.