gpt4 book ai didi

java - PNG 文件格式和图像字节?

转载 作者:行者123 更新时间:2023-11-30 11:38:28 25 4
gpt4 key购买 nike

我目前正在尝试编写一个程序来将文本编码为 png 文件,仅更改我要在图片中编码的每个字母的最低有效位,例如我有一个 65 的“A”,我使用 8 个不同的字节来编码字母 A。所以01010100<- 10101101<- 11011010<- 10101010<- 这些我都改变了最后一位和 put10110110<- 01010100<- 01010100<- 01010101<- 它们加在一起所以 65 是 01000001 每个数字 箭头根据65改变。

如果我应该以不同的方式处理这个问题,建议会很棒 :)。这只是我想做的一个有趣的小项目。但无论如何回到我的问题。

当我读入一个只有 4 像素大的图像时,我得到了 680 个字节,这太疯狂了,或者至少我认为是这样,也许我错了? 8 位 ARGB 的 4 个像素每个应该是 16 个字节,其中几个字节我肯定会告诉操作系统它是一个 png 以及如何处理它。所以我期待可能像 30 个字节。也许更少。我是不是看错了?当 png 图像被压缩时,如果它是一张小图片,它们会变大吗?而且,当我将它保存回硬盘时,我总是得到一个更大的文件。原图8554kb,存回去后变成16kb左右。这是获取图像字节和保存图像的代码。也许我做错了什么,或者我只是没有正确理解它。

这些是我获取图像的方式(我尝试了两种不同的方法)

// BufferedImage img = ImageIO.read(new File("image.png"));
BufferedImage img= robot.createScreenCapture(new Rectangle(1,2,2,2));

我如何再次以两种不同的方式保存。

try {
InputStream in = new ByteArrayInputStream(imgBytes);
BufferedImage bImageFromConvert = ImageIO.read(in);
ImageIO.write(bImageFromConvert, "png", new File( "image.png"));

//FileOutputStream fos = new FileOutputStream("image.png");
//fos.write(b);
//fos.close();
}catch(Exception e){}

我如何从图像中获取字节,我再次尝试了两种不同的方法,第二种被注释掉的方法实际上确实给了我想要的 16 个字节,但是当我保存它时 Windows 无法打开它,因为它不知道我猜是什么?不确定,只是说文件不受支持。

byte[] imageBytes = null;
try{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", baos );
baos.flush();
imageBytes = baos.toByteArray();
baos.close();
}catch(IOException e){System.out.println(e.getMessage());}

// imageBytes = ((DataBufferByte) image.getData().getDataBuffer()).getData();
return imageBytes;

谢谢!

最佳答案

PNG 包含大量图像元数据以及原始图像数据。这就是给你疯狂的 680 字节的原因。

关于java - PNG 文件格式和图像字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13618203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com