繁体   English   中英

如何在Java中读取图像的字节数?

[英]How to read Bytes of an Image in Java?

我目前正在使用Java处理图像。 最初,我使用ImageIO类编写图像

ImageIO.write(image,"jpg",os);

这种方法的问题是失去了实际的图像尺寸和质量。 然后我更喜欢ByteStream

Files.readAllBytes(fi.toPath());

阅读和

fos.write(fileContent);

写图像。 这很完美。 我在这里面临的问题是我只能读取文件,而不能读取图像(即BuffreredImage图像)。 是否可以在此处读取映像而不是文件,还是应该移至其他IO?

代码段在这里,

try {

File fnew=new File("d:\\3\\IMG1.jpg"); 
java.io.FileOutputStream fos = new java.io.FileOutputStream(new             File("d:\\3\\Test1\\4.jpg"));
File fi = new File("d:\\3\\7.jpg");
byte[] fileContent = Files.readAllBytes(fi.toPath());
fos.write(fileContent);

} catch (Exception e) {

System.out.println("Exception");
}

任何建议或帮助将不胜感激。 提前致谢。

这种方法的问题是失去了实际的图像尺寸和质量。 然后我更喜欢ByteStream

当使用ImageIO读取JPEG时,它将自动将JPEG转换为位图。 然后,当您编写它时,它会再次编码为JPEG(质量下降)。

只需将ImageIO.write(image,"jpg",os)替换为ImageIO.write(image,"png",os)可以了。 写入图像时,PNG等无损格式不会丢失任何数据。

BufferedImage getRGB()将为您获取图像的所有实际像素数据。 将没有压缩或JPEG之类的内容。 这将是原始图像。

编辑以根据我的评论添加示例...

    BufferedImage image = ImageIO.read(new File("google.jpg"));
    ImageWriter w = ImageIO.getImageWritersBySuffix("jpg").next();
    ImageOutputStream out = ImageIO.createImageOutputStream(new File("output.jpg"));
    w.setOutput(out);
    ImageWriteParam param = new JPEGImageWriteParam(Locale.getDefault());
    param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    param.setCompressionQuality(1);
    w.write(null, new IIOImage(image, null, null), param);
    out.close();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM