1

我在 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 代码,但我不知道如何在 matlab 中使用代码。C#、Java 中有很多选项,但我不知道如何在 matlab 中使用它们。请在这方面帮助我。

4

2 回答 2

1

我在 Matlab R2012a 下运行了您的代码,它似乎按预期工作。

也许这里缺少的是从base64编码的二进制数据中获取图像文件的几行代码。您只需将二进制数据写入文件即可取回图像文件。

我只是引用了xmliotools您在代码中使用的 Matlab FileExchange 提交的 HTML 帮助文件:

读取嵌入二进制数据的 XML 文件,编码为 Base64(使用 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);
于 2013-03-15T16:01:09.790 回答
1

简单的 Base64 处理

使用Apache 库

base64 = org.apache.commons.codec.binary.Base64

然后你可以调用encode或decode。

base64.encode()
base64.decode()

它需要 byte[],所以你可以通过几种方式得到它。让我们对字符串进行编码,然后对其进行解码。

hello = 'Hello, world!';
encoded = char(base64.encode(unicode2native(hello))).';
result = native2unicode(base64.decode(uint8(output)).');
于 2015-12-24T09:08:32.983 回答