gpt4 book ai didi

java - 如何提取 jpeg 图像末尾的附加数据(检测 jpeg EOF)。

转载 作者:太空宇宙 更新时间:2023-11-04 11:35:36 25 4
gpt4 key购买 nike

由于 0xFFD9 不一定存在于 JPEG 图像中(作为 EOF 标记),即使存在,由于 jpeg 中嵌入的缩略图,也可能会给出不正确的结果,因此我需要解析 JPEG 以提取任何附加数据(例如 zip)。我有以下 java 代码,基于标记后面跟着 2 个字节长度的假设。但 SOS 段(即 0xFFDA 标记)的情况并非如此。如何检测 JPEG 中的 EOF?

public String getJPEGAppendedData(DataInputStream in) {
StringBuilder message = new StringBuilder();
try {
// reading first two bytes 0xFFD8
in.readFully(new byte[2]);

// 0xFFXX
byte twoBytes[] = new byte[2];

while (true) {
in.readFully(twoBytes);
if (twoBytes[0] == (byte) 0xFF) {
if (twoBytes[1] == (byte) 0xDD) {
// fixed 4 bytes payload
in.readFully(new byte[4]);
} else if (twoBytes[1] == (byte) 0xD9) {
// end of image reached
break;
} else if (twoBytes[1] >= (byte) 0xD0 && twoBytes[1] <= (byte) 0xD7) {
// no payload
} else {
// reading payload length form two bytes
short length = in.readShort();
System.out.println(length);

// skipping payload
for (int i = 1; i <= length - 2; i++) {
in.readByte();
}
}
} else {
break;
}
}

// reading appended data (byte by byte) if any
boolean moreData = true;
while (moreData) {
try {
byte b = in.readByte();
message.append(String.format("%02X", b));
} catch (Exception e) {
moreData = false;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return message.toString();
}

最佳答案

我认为你不需要检测结束。

如果您自己生成消息,那么您可以转到包含图像的字节数组的末尾,并检测是否存在 EOI (ddf9) ,如果没有,则将其添加到那里并附加您的消息。

由于 EOI 应该是图像的结尾,因此即使它已经存在,您也可以自己附加它。

读取消息时,从文件末尾读取并检测 ddf9 (这可能存在于消息本身中,因此最好选择较长的分隔符,如 @@SecretMessageOfMine@@ 并检测它。

例如下面给出的图片

a certain black hole

您可以生成如下图像数组

enter image description here

关于java - 如何提取 jpeg 图像末尾的附加数据(检测 jpeg EOF)。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43328297/

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