MatLab将JPEG二进制数据转为图像、解决fwrite编码损坏及免写临时文件问题
MatLab二进制图像数据处理方案
现有代码错误原因
- 二进制文件读写错误指定编码与打开模式:JPG属于二进制格式文件,写入时使用
'w'文本模式且指定UTF-8编码会触发字符转义逻辑,导致ÿØÿà这类高位字节被过滤丢失,是文件损坏的核心原因。 - 读写数据类型不匹配:
fread默认将二进制文件的单字节uint8数据读取为double类型数组,你写入时指定'uint32'类型,相当于把每个原始字节扩展为4个字节写入,完全破坏了原文件的二进制结构。
修复后的文件读写方案
调整写入逻辑的打开模式与数据类型即可生成正常的图像文件:
% 读取图像数据(原逻辑无问题) fid = fopen("ente2.jpg",'rb'); bytes = fread(fid); fclose(fid); % 修复后的保存图像逻辑 outfile = 'out.jpg'; [fid, msg] = fopen(outfile, 'wb'); % 改用二进制写模式,无需指定编码 if fid < 0 error('Failed to create file "%s" because "%s"', outfile, msg); end fwrite(fid, bytes, 'uint8'); % 匹配原始数据的单字节类型写入 fclose(fid); % 打开图像 p = imread(outfile); figure(); imshow(outfile);
无需写盘直接生成图像变量的方案
你可以直接使用MatLab内置的imdecode函数,直接解码内存中存储的二进制数据,完全跳过写入磁盘的步骤,也不会遇到编码相关问题:
fid = fopen("ente2.jpg",'rb'); bytes = fread(fid); fclose(fid); % 直接从内存数据解码图像,无需写入临时文件 p = imdecode(bytes); figure(); imshow(p);
内容的提问来源于stack exchange,提问作者vosspl
相关产品推荐
相关产品推荐

