我有一个生成图像的Java Applet。最后,我想将图像数据插入到数据库中,因此我想暂时将图像数据存储在包含applet的页面上的表单字段中。我希望不在客户端计算机上存储图像文件的情况下这样做。
这一切都来自签名板。这是一些代码,它应该从存储在sigObj对象中的矢量数据生成一个位映射图像:
sigObj.setImagePenWidth(10);
sigObj.setImageXSize(1000);
sigObj.setImageYSize(350);
image = sigObj.sigImage();
图像变量是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编码。也许这是微不足道的,但对我来说这是新的。
答案 0 :(得分:2)
你基本上有两个选择:
使用Base64将其从byte[]
编码到String
,以便在作为字符数据传输时二进制数据不会格式错误。然后,让JavaScript将其设置为某些POST表单的隐藏输入值。在服务器端,您需要对其进行Base64解码以获取原始字节数组。
使用Java以编程方式在Applet中触发HTTP POST请求。 Java SE API为此提供java.net.URLConnection
(little tutorial here)。更方便的API是Httpclient。在服务器端,您只需将其作为常规POST请求参数处理。
目前还不清楚您正在使用哪种服务器端编程语言,因此我无法为该方提供更详细的答案。