我想把applet端的图片编码,传送到servlet端,代码如下
//先写一个编码方法
public static void writeJPEG(OutputStream out, BufferedImage image,
int quality, IIOWriteProgressListener listener) throws
IOException {
ImageOutputStream ios = ImageIO.createImageOutputStream(out);
Iterator it = ImageIO.getImageWritersBySuffix("jpg");
if (it.hasNext()) {
ImageWriter iw = (ImageWriter) it.next();
ImageWriteParam iwp = iw.getDefaultWriteParam();
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwp.setCompressionQuality((float) quality / 100f);
iw.setOutput(ios);
iw.addIIOWriteProgressListener(listener);
iw.write(null, new IIOImage(image, null, null), iwp);
iw.dispose();
out.flush();
out.close();
}
}
然后在applet端
ByteArrayOutputStream baos = new ByteArrayOutputStream();
writeJPEG(baos, bi1, 50, null); //其中bi1是通过jPanel1取得的一个图象
byte[] imageData = baos.toByteArray();
String kk = new String(imageData);
oos.writeUTF(kk);
在servlet端:
String kk = ois.readUTF();
byte [] imageData = kk.getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(imageData);
bi1 = ImageIO.read(bais);
File file1 = new File("aa"+".jpg");
ImageIO.write(bi1,"jpg",file1);结果在servlet端报错:
java.lang.IllegalArgumentException:
问题在这里:bi1为空。
请问为什么会有这样的问题?应该如何解决呢
//先写一个编码方法
public static void writeJPEG(OutputStream out, BufferedImage image,
int quality, IIOWriteProgressListener listener) throws
IOException {
ImageOutputStream ios = ImageIO.createImageOutputStream(out);
Iterator it = ImageIO.getImageWritersBySuffix("jpg");
if (it.hasNext()) {
ImageWriter iw = (ImageWriter) it.next();
ImageWriteParam iwp = iw.getDefaultWriteParam();
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwp.setCompressionQuality((float) quality / 100f);
iw.setOutput(ios);
iw.addIIOWriteProgressListener(listener);
iw.write(null, new IIOImage(image, null, null), iwp);
iw.dispose();
out.flush();
out.close();
}
}
然后在applet端
ByteArrayOutputStream baos = new ByteArrayOutputStream();
writeJPEG(baos, bi1, 50, null); //其中bi1是通过jPanel1取得的一个图象
byte[] imageData = baos.toByteArray();
String kk = new String(imageData);
oos.writeUTF(kk);
在servlet端:
String kk = ois.readUTF();
byte [] imageData = kk.getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(imageData);
bi1 = ImageIO.read(bais);
File file1 = new File("aa"+".jpg");
ImageIO.write(bi1,"jpg",file1);结果在servlet端报错:
java.lang.IllegalArgumentException:
问题在这里:bi1为空。
请问为什么会有这样的问题?应该如何解决呢
解决方案 »
- 一个关于java流程控制的例子,但无法达到预定目的,始终无法执行大部分代码
- java程序中导入的标准类不需要配置CLASSPATH吗?
- 关于socket通信时的问题
- 骑士巡游问题java实现
- 关于字符串分割的问题,请大家帮忙想想
- JDIC ! JDIC ! Java 嵌入浏览器
- hql语句
- /**小妹lily**/ JavaTM 2 Runtime Environment (J2RE)和JavaTM 2 Software Development Kit (J2SDK)有什么区别?
- 求救有关打包成jar的问题
- Java结合XML的面向对象设计及其应用,有经验的XDJM进来讨论一下……
- 麻烦大虾们给我的作业改错?
- 同样是交换两数的问题
byte [] imageData = kk.getBytes();问题可能出在这里呀,你看看 imageData 里的数据和 applet 端的是否相同.
应该怎么改呢?好象oos没办法直接传输byte[]哦