我在Matlab环境中为一个项目工作,我必须从数据库服务器解码以xml格式接收的RGB图像,该服务器以base64格式编码。我成功地将图像转换为base64并通过将其转换为xml将其发布到数据库。我使用base64encode/decode将图像编码为base64,我已经附加了下面的程序。问题是当我使用base64decode函数并尝试从base64重新转换图像时。它根本不起作用。
这是我将图像转换为base64并将其编码为xml的程序。
function image2xml(test_directory)
% Images in directory ---> byte array format in XML
% This function encodes all the images available in the test directory into
% byte array/base 64 format and saves them in xml with the following
% properties
% Packs the image(byte array) and its name as timestamp to xml
% Uses functions from the following source
% http://www.mathworks.de/matlabcentral/fileexchange/12907-xmliotools
% Following functions from the above source are to be added to path,while
% running this function
% xml_write.m
% xml_read.m
%% ========================================================================
files=dir(test_directory)
% delete('test_image_xml\*.xml');
% If not database_mat is included in the function arguments
for i = 1:size(files,1)
k=0;
if files(i).isdir()==0
%extracts name with which it savesa as xml
[~, name_to_save,~ ] = fileparts(files(i).name)
filename = fullfile([test_directory,'\',files(i).name])
fid = fopen(filename);
raw_data = uint8(fread(fid));% read image file as a raw binary
fclose(fid);
%Definition of xml tags
image_imagedetails = [];
% name of the file is assumed to be the timestamp
image_imagedetails.timestamp =name_to_save;
%imagescan.imagebyte64.ATTRIBUTE.EncodingMIMEType = 'base64';
image_imagedetails.imagebase64 = base64encode(raw_data);% perform base64 encoding of the binary data
%saves all the xml files into the predefined directory
mkdir('images_and_timestamp_xml');
filename = ['images_and_timestamp_xml\' name_to_save,'.xml' ];
post_data = xml_write(filename, image_imagedetails);
end
end
最后,我使用以下内容将使用base64格式的图像创建的xml重新转换回图像,但不幸的是它不起作用,并抛出一些奇怪的字符,我无法将其转换回图像。我还不知道如何将字符串转换回图像。
filename = '...\IMAG0386.xml';
tree = xml_read(filename);
image = tree.imagebase64;
K = base64decode(tree.imagebase64)) %test image retrieval --> only the string
我尝试了其他选项,比如在matlab中使用Java code,但我不知道,如何在matlab中使用代码。 C#,Java有很多选项,但我不知道如何在matlab中使用它们。请帮助我。
答案 0 :(得分:1)
base64 = org.apache.commons.codec.binary.Base64
然后你可以调用编码或解码。
base64.encode()
base64.decode()
它需要byte [],所以你可以通过几种方式获得它。让我们编码一个字符串然后解码它。
hello = 'Hello, world!';
encoded = char(base64.encode(unicode2native(hello))).';
result = native2unicode(base64.decode(uint8(output)).');
答案 1 :(得分:0)
我在Matlab R2012a下运行你的代码,它似乎按预期工作。
这里可能缺少的是从base64中编码的二进制数据中获取图像文件的几行。您只需将二进制数据写入文件即可恢复图像文件。
我只是引用您在代码中使用的Matlab FileExchange提交xmliotools
中的HTML帮助文件:
使用编码为Base64的嵌入式二进制数据读取XML文件(使用java 版本)
tree = xml_read('test.xml', Pref); % read xml file
raw = base64decode(tree.MyImage.CONTENT, '', 'java'); % convert xml image to raw binary
fid = fopen('MyFootball.jpg', 'wb');
fwrite(fid, raw, 'uint8'); % dumb the raw binary to the hard disk
fclose(fid);
I = imread('MyFootball.jpg'); % read it as an image
imshow(I);