Мне нужно разделить файл tiff на несколько файлов tiff с помощью разделителя II *, поэтому я использую приведенный ниже код для преобразования tiff-файла в base64 и используя подстроку для извлечения первой изображение. Однако я получаю ошибку, как показано ниже. Пожалуйста, сообщите, как извлечь только первое изображение из файла tiff, используя этот разделитель II * (код base64 - SUkq).Сплит файлы TIFF для нескольких файлов
Я могу декодировать изображение без выполнения подстроки.
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1954)
at EncodeStringTest.main(EncodeStringTest.java:63)
Класс File
public class EncodeStringTest {
public static void main(String[] args) {
File file = new File("D:\\Users\\Vinoth\\workspace\\image.tif");
try {
/*
* Reading a Image file from file system
*/
FileInputStream imageInFile = new FileInputStream(file);
byte imageData[] = new byte[(int)file.length()];
imageInFile.read(imageData);
/*
* Converting Image byte array into Base64 String
*/
String imageDataString = encodeImage(imageData);
System.out.println(imageDataString);
String result = imageDataString.substring(imageDataString.indexOf("SUkq") + 1, imageDataString.indexOf("SUkq"));
/*
* Converting a Base64 String into Image byte array
*/
System.out.println("Resulted String"+imageDataString);
byte[] imageByteArray = decodeImage(result);
/*
* Write a image byte array into file system
*/
FileOutputStream imageOutFile =
new FileOutputStream("D:\\Users\\Vinoth\\workspace\\image_2.tif");
imageOutFile.write(imageByteArray);
imageInFile.close();
imageOutFile.close();
System.out.println("Image Successfully Manipulated!");
} catch (FileNotFoundException e) {
System.out.println("Image not found" + e);
} catch (IOException ioe) {
System.out.println("Exception while reading the Image " + ioe);
}
}
public static String encodeImage(byte[] imageByteArray){
return Base64.encodeBase64URLSafeString(imageByteArray);
}
public static byte[] decodeImage(String imageDataString) {
return Base64.decodeBase64(imageDataString);
}
}
Вы можете попробовать это решение и сообщить мне свои комментарии. https://stackoverflow.com/a/45583553/7731623 –
Этот код не работает для меня, так как мой файл содержит несколько файлов tiff в одном и каждый имеет отдельные метаданные. Таким образом, этот код будет читать только первое изображение в моем файле. Спасибо за ваше предложение, я уже нашел решение, преобразовывая изображение в байтовый массив и считывая каждый символ изображения по символу и назначая отдельный поток вывода и объединяя весь поток с одним тифом, используя twiffemonkeys tiff writer. – Vinoth