如何将图像从Java Applet发送到JavaScript?

我有一个生成图像的Java Applet。 最后,我想将图像数据插入到数据库中,因此我想将图像数据临时存储在包含applet的页面上的表单字段中。 我希望这样做,而无需在客户端计算机上存储图像文件。

这一切都来自签名板。 这是一些代码,它应该从存储在sigObj对象中的矢量数据生成一个位映射图像:

sigObj.setImagePenWidth(10); sigObj.setImageXSize(1000); sigObj.setImageYSize(350); image = sigObj.sigImage(); 

image变量是BufferedImage对象。 此外,如果我只是将图像变量发送回我的JavaScript,这里是警报输出:

 BufferedImage@fe748f: type = 5 ColorModel: # pixelBits = 24 numComponents = 3 color space = java.awt.color.ICC_ColorSpace@641e9a transparency = 1 has alpha = false isAlphaPre = false ByteInterleavedRaster: width = 1000 height = 350 # numDataElements 3 dataOff[0] = 2 

(为了便于阅读,添加了换行符)

是否可以将图像本身发回? 有什么建议么?

我不太了解Java,所以如果我问一个愚蠢的问题,我道歉。

谢谢。

编辑:

根据BalusC的建议,这里是我用来将图像转换为Base64字符串的代码,适用于任何可能感到好奇的人:( img是BufferedImage,dataImg是String)

 import org.apache.commons.codec.binary.Base64; ... try{ ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(img, "BMP", baos); byte[] bytes = baos.toByteArray(); dataImg = new Base64().encodeBase64String(bytes); } catch(Exception e) {} 

这使用Apache Commons Codec进行Base64编码。 也许这是微不足道的,但这对我来说是新的。

你基本上有两个选择:

  1. 使用Base64将它从byte[]编码到String以便在作为字符数据传输时二进制数据不会格式错误。 然后,让JavaScript将其设置为某些POST表单的隐藏输入值。 在服务器端,您需要对其进行Base64解码以获取原始字节数组。

  2. 使用Java以编程方式在Applet中触发HTTP POST请求。 Java SE API为此提供了java.net.URLConnection ( 这里的小教程 )。 一个更方便的API是Httpclient 。 在服务器端,您只需将其作为常规POST请求参数处理。

目前还不清楚你正在使用哪种服务器端编程语言,所以我无法给出更详细的答案。