【发布时间】:2021-08-19 12:02:13
【问题描述】:
我在尝试使用 fread() 打开已读入 MatLab 的二进制数据时遇到问题。 我的第一种方法是使用 fwrite() 保存图像,但 MatLab 似乎总是默认为 Windows-1252 编码,这会在写入时丢失一些数据。 (如果我打开原始输入和输出,内容是相同的,除了输出缺少“ÿØÿà”之类的字符,这显然意味着图像已损坏。
我没有找到解决此编码问题的方法。
虽然我确实认为这个方法应该可以工作,但我也不想在打开文件之前将数据写入文件。最好立即创建一个图像变量。不过,我没有找到解决方案。
我当前的代码:
读取图像数据
fid = fopen("ente2.jpg",'rb');
bytes = fread(fid);
fclose(fid);
保存图片
outfile = 'out.jpg';
[fid, msg] = fopen(outfile, 'w', "n","UTF-8");
if fid < 0
error('Failed to create file "%s" because "%s"', outfile, msg);
end
fwrite(fid, bytes, 'uint32');
fclose(fid);
打开图片
p = imread(outfile);
figure();
imshow(outfile);
【问题讨论】:
-
所以你有一个文件
ente2.jpg,你读入它的所有字节,把它们写到一个新文件中,本质上是创建一个文件的副本,然后使用imread读入那个副本。为什么不直接用imread读入原文件呢?我不明白你想在这里完成什么。 -
如果JPEG文件的二进制数据来自其他地方,您可以使用函数such as this one对其进行解码并生成原始像素数据。
标签: matlab encoding utf-8 windows-1252