我尝试将Tiff图像转换为Byte [],但从java 1.8 sdk获取异常。我在谷歌搜索但尚未得到解决方案。 相同的代码适用于java 1.6 。
public static byte[] convertImage(String dirName, String imageName)
{
try
{
//String dirName="C:\\Temp\\";
ByteArrayOutputStream baos=new ByteArrayOutputStream(1000);
BufferedImage img=ImageIO.read(new File(dirName,imageName));
ImageIO.write(img, "tif", baos);
baos.flush();
byte[] bytearray = baos.toByteArray();
baos.close();
return bytearray;
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrace();
}
return null;
}
变量 img 在java 1.8中始终为null,但1.6返回信息。
从sdk 1.8引发的异常如下
java.lang.IllegalArgumentException: image == null!
at javax.imageio.ImageTypeSpecifier.createFromRenderedImage(Unknown Source)
at javax.imageio.ImageIO.getWriter(Unknown Source)
at javax.imageio.ImageIO.write(Unknown Source)
at test.practice.net.ConverterImageUsing18.convertImage(ConverterImageUsing18.java:88)
at test.practice.net.ConverterImageUsing18.GetBase64BinaryAsString(ConverterImageUsing18.java:52)
at test.practice.net.ConverterImageUsing18.main(ConverterImageUsing18.java:42)
任何点击或示例代码都很明显。
答案 0 :(得分:4)
ImageIO需要一个额外的插件来读取或写入TIFF。 built-in formats是BMP,GIF,JPEG,PNG和WBMP。要读取或写入TIFF,您可以使用JAI(jai_imageio.jar
),TwelveMonkeys ImageIO或类似内容。
如果没有合适的插件,ImageIO.read(...)
只会返回null
。这是img
为null
的最可能原因(并且您获得例外)。您可能在Java 1.6 JRE中安装了JAI或类似版本,或者您可能正在使用其他文件进行测试。
但是,如果您只想获取原始文件的字节,则根本不需要使用ImageIO。只需将文件中的字节读入字节数组,例如:
File file = new File(dirName, imageName);
int length = (int) file.length();
byte[] bytes = new byte[length];
try (DataInputStream input = new DataInputStream(new FileInputStream(file))) {
input.readFully(bytes);
}
或者在Java 8中,你可以写得更优雅(谢谢@JoopEggen):
File file = new File(dirName, imageName);
byte[] bytes = Files.readAllBytes(file.toPath());