我想将 JPEG 文件转换为其二进制等效文件,然后将其转换回其 JPEG 格式。即将JPEG文件转换为1和0并将其输出为文本文件,然后将该文本文件转换回原始图像(只是检查转换是否有错误)
我曾尝试在 python 中使用 binascii 模块执行此操作,但似乎存在我无法理解的编码问题。
如果有人可以帮助我解决这个问题,那就太好了!
PS:Java中的解决方案将更加感激
我想将 JPEG 文件转换为其二进制等效文件,然后将其转换回其 JPEG 格式。即将JPEG文件转换为1和0并将其输出为文本文件,然后将该文本文件转换回原始图像(只是检查转换是否有错误)
我曾尝试在 python 中使用 binascii 模块执行此操作,但似乎存在我无法理解的编码问题。
如果有人可以帮助我解决这个问题,那就太好了!
PS:Java中的解决方案将更加感激
好吧,你会很抱歉 ;-),但这里有一个 Python 解决方案:
def dont_ask(inpath, outpath):
byte2str = ["{:08b}".format(i) for i in range(256)]
with open(inpath, "rb") as fin:
with open(outpath, "w") as fout:
data = fin.read(1024) # doesn't much matter
while data:
for b in map(ord, data):
fout.write(byte2str[b])
data = fin.read(1024)
dont_ask("path_to_some_jpg", "path_to_some_ouput_file")
当然,这会将任何文件转换为由“1”和“0”字符组成的 8 倍大的文件。
顺便说一句,我不是在写另一半——但不是因为它很难 ;-)
将任何文件(不仅仅是 JPG)转换为二进制文件的 Java 解决方案:
File input= new File("path to input");
File output = new File("path to output");
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(input));
BufferedWriter bw = new BufferedWriter(new FileWriter(output))) {
int read;
while ((read=bis.read()) != -1) {
String text = Integer.toString(read,2);
while (text.length() < 8) {
text="0"+text;
}
bw.write(text);
}
} catch (IOException e) {
System.err.println(e);
}