1

私はプロジェクトの Matlab 環境で作業しており、base64 形式でエンコードされたデータベース サーバーから xml で受信した RGB 画像をデコードする必要があります。画像を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コードで使用しているMatlabFileExchange送信からの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);
于 2013-03-15T16:01:09.790 に答える
1

シンプルな Base64 処理

Apache ライブラリの使用

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)).');
于 2015-12-24T09:08:32.983 に答える