在matlab中将base64解码为RGB图像

时间:2013-03-02 19:10:41

标签: image matlab encoding base64 decode

我在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中使用它们。请帮助我。

2 个答案:

答案 0 :(得分:1)

简单的Base64处理

使用Apache library

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);