5

私はwPaintと呼ばれるjQueryプラグインを使用して、ユーザーが独自の画像を描画できるようにしています。結果の画像を文字列としてサーバーに送信します。

data:image / png; base64、

以下の2つの方法を試しましたが、どちらの方法でも画像を保存できません。

アプローチ1

String imageData = parameterParser.getStringParameter("image", ""); 
byte[] imgByteArray = Base64.decodeBase64(imageData.getBytes());
FileOutputStream fileOutputStream = new FileOutputStream("/home/arvind/Desktop/test.png");
fileOutputStream.write(imgByteArray);
fileOutputStream.close();

この場合、ファイルは書き込まれますが、画像は表示されません。ただし、ファイル拡張子を削除すると、サーバーに送信された文字列(つまり、imageDataにあるもの)が取得されます。

アプローチ2

String imageData = parameterParser.getStringParameter("image", ""); 
byte[] imgByteArray = Base64.decodeBase64(imageData.getBytes());
InputStream in = new ByteArrayInputStream(imgByteArray);
BufferedImage bImageFromConvert = ImageIO.read(in);
ImageIO.write(bImageFromConvert, "png", new File("/home/arvind/Desktop/test.png"));

BufferedImage bImageFromConvertがnullであるため、ファイルの作成時に例外(IllegalArgumentException)が発生します。

Base64クラスは、Apache Commonsコーデックライブラリからのものであり、バージョン1.2です。

私が間違っていることはありますか?

4

2 に答える 2

5

最初は、次のコードを使用してデータをサーバーに送信していました。

    $.ajax({
        url : '/campaign/holiImageUpload.action',
        type : 'POST',
        data : "image=" + $("#wPaint2").wPaint("image")
        success :function(data){
        }
    });

今、私は次のコードを使用してサーバーにデータを送信しています

var imgData = $("#wPaint2").wPaint("image");
    $.ajax({
        url : '/campaign/holiImageUpload.action',
        type : 'POST',
        data : {image : imgData},
        success :function(data){
        }
    });

サーバー側では、これが最終的なコードです。

String imageData = parameterParser.getStringParameter("image", "");

    try {
        imageData = imageData.substring(22);
        byte[] imgByteArray = Base64.decodeBase64(imageData.getBytes());
        InputStream in = new ByteArrayInputStream(imgByteArray);
        BufferedImage bufferedImage = ImageIO.read(in);
        ImageIO.write(bufferedImage, "png", new File("/home/arvind/Desktop/test.png"));
    catch(Exception ex){
        ex.printStrackTrace();
    }
于 2013-03-19T08:34:35.870 に答える
0

data:image/png'base64Base64でエンコードされたデータと一緒にデコードしようとしているようですか?Base64データをイメージバイトにデコードする前に、入力文字列からそれを削除する必要があります。

また、文字列をバイトとしてデコードする必要はありません...文字列と同じように。

于 2013-03-18T12:59:15.703 に答える