2011-01-10 12 views
2

私は画像ファイル(サーバ側のディレクトリ)を作成するために使用したい処理スケッチに関する問題に苦労しています。 Javaでは、キャンバスのPImageを使用してBufferedImageに変換し、ImageIO.writeを介してファイルとして作成します。アプレットがImageIO.writeを介して画像ファイルを作成しない

私のシステムでスケッチとして実行するとファイルが正常に作成され、file.pngはプログラムと同じフォルダに表示されます。問題は、プログラムがアプレットとしてエクスポートされたときに、もはやそのファイルを作成しないということです。なぜ誰かがプログラムのスケッチがイメージを作成することができるが、アプレットができない理由について誰かが入力を持っていれば巨大になるでしょう。

これは、私が何か役立っている場合、私が使っているもののいくつかの抜粋です。皆さんありがとう。

PImage pimg = get(); 
BufferedImage canvas = convertToBufferedImage(pimg); 
File file = new File("./sketch/file.png"); 
try 
{ 
    ImageIO.write(canvas, "PNG", file); 
} 
catch (Exception e) { println(e); } 

ここでは、PImageをBufferedImageに変換する方法を示します。

BufferedImage convertToBufferedImage(PImage pimg){ 
    PGraphics pg = createGraphics(width, height, JAVA2D); 
    pg.image(pimg, 0, 0); 
    BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB_PRE); 
    Graphics2D g2d = img.createGraphics(); 
    g2d.drawImage((java.awt.Image)pg.image, 0, 0, width, height, this); 
    g2d.finalize(); 
    g2d.dispose(); 
    return img; 
} 
+0

変更しても例外はありません。アプレットは正常に実行されますが、ディレクトリにイメージファイルは作成されません。別の奇妙なことは、スケッチの場合、パスが単に "file.png"の場合、実際には親ディレクトリにファイルが作成されるため、パスを "./sketch/file.png"として保存する必要がありますスケッチと同じディレクトリに配置します。アプレットとしてエクスポートすると、 "./applet/file.png"または単に "file.png"に変更すると、それはまだどこにも見えません。 – Scott

+0

それを試してみてください。スケッチとして実行するとtrueを返し、.pngファイルが正常に作成されます。私はまだアプレットとしてそれを実行するときにエラーが発生しません。 – Scott

+1

アプレットはサーバー側のファイルにアクセスできません。サーブレットを作成する必要がある場合は、サーブレットを作成する必要があります。 – OrangeDog

答えて

1

私は、アプレットのセキュリティ上の制限から、クライアントマシン上のファイルシステムを変更できないと考えています。

JNLPでFileSaveServiceをご覧ください。これは、署名されていないアプレットからクライアントマシン上のファイルシステムにファイルを保存するために使用できます。

サーバのディレクトリに、アプレットから直接書き込むことはできません。サーバー上にアップロードフォームを作成し、HttpURLConnectionを使用してPOST要求をサーバーに送信する必要があります。

+0

ImageIO.writeはこれを達成するために間違ったアプローチをしていますか?私は、BufferedImageをBase64Stringにエンコードし、それをPHPで受信してデコードするなどのソリューションを見てきました。 BufferedImageをサーバーにアップロードするためにPOSTする適切な方法ですか? – Scott

+0

@Scott、 'ImageIO.write'を使ってイメージをエンコードするのに間違いはありませんが、ファイルの代わりに' HttpURLConnection'やバイト配列に送る必要があります。 [この質問](http://stackoverflow.com/questions/1314249/java-upload-and-post-file-to-php-page)と[this one](http://)の回答を見てください。 /image/gif/paws/87090/java-applet-to-upload-a-file)。 – finnw

+0

知識の贈り物のためにみんなありがとう。おそらく私の問題の最も有望な解決策はこれでした。 http://stackoverflow.com/questions/1889881/using-processing-on-a-server-to-create-images-behind-the-scenes/2006597#2006597 – Scott

関連する問題