将Tif图像转换为byte []

时间:2015-07-15 01:51:46

标签: java file-io bufferedimage javax.imageio

我尝试将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)

任何点击或示例代码都很明显。

1 个答案:

答案 0 :(得分:4)

ImageIO需要一个额外的插件来读取或写入TIFF。 built-in formats是BMP,GIF,JPEG,PNG和WBMP。要读取或写入TIFF,您可以使用JAI(jai_imageio.jar),TwelveMonkeys ImageIO或类似内容。

如果没有合适的插件,ImageIO.read(...)只会返回null。这是imgnull的最可能原因(并且您获得例外)。您可能在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());