【发布时间】:2016-07-15 01:57:04
【问题描述】:
我需要使用分隔符 II* 将 tiff 文件拆分为多个 tiff 文件,因此我使用以下代码将 tiff 文件转换为 base64 并使用子字符串提取第一个图像。但是我收到如下错误。请告知如何使用此分隔符 II* 仅从 tiff 文件中提取第一张图像(base64 代码为 SUkq)。
我能够在不执行子字符串的情况下解码为图像。
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)
类文件
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);
}
}
【问题讨论】:
-
你能试试这个解决方案,让我知道你的 cmets。 stackoverflow.com/a/45583553/7731623
-
该代码对我不起作用,因为我的文件包含多个 tiff 文件,每个文件都有单独的元数据。所以该代码只会读取我文件中的第一个图像。感谢您的建议,我已经通过将图像转换为字节数组并逐个字符读取每个图像并分配给单独的输出流并使用 twlevemonkeys tiff writer 将所有流合并到单个 tiff 找到了解决方案。