3
我正在讀取servlet中的兩個圖像,並且需要同時顯示兩個圖像。 當前,只顯示一個圖像(首先寫入一個圖像)。無法寫入其他圖像。 我沒有收到任何錯誤。將多個圖像寫入到servlet中的outputStream中
我的servlet代碼是這樣的:
BufferedImage buffImageA = ImageIO.read(getServletContext().getResourceAsStream("/images/3520276097315A.jpg"));
BufferedImage buffImageB = ImageIO.read(getServletContext().getResourceAsStream("/images/3520276097315B.jpg"));
logger.logDebug("Images has been read");
watermark(buffImageA,ApplicationConfig.WATERMARK_TEXT);
watermark(buffImageB,ApplicationConfig.WATERMARK_TEXT);
byte[] resultDataA = encodeJPEG(buffImageA, 100);
byte[] resultDataB = encodeJPEG(buffImageB, 100);
byte[] combinedImage = new byte[resultDataA.length+resultDataB.length];
for(int i=0; i<resultDataA.length ;i++){
combinedImage[i] = resultDataA[i];
}
for(int i=resultDataA.length; i<resultDataB.length ;i++){
combinedImage[i] = resultDataB[i];
}
response.setContentType("image/jpeg");
response.setContentLength(resultDataA.length + resultDataB.length);
OutputStream os = response.getOutputStream();
os.write(combinedImage);
os.close();
//水印過程到這裏
private void watermark(BufferedImage original, String watermarkText) {
}
private byte[] encodeJPEG(BufferedImage image, int quality) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream((int) ((float) image.getWidth() * image.getHeight()/4));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(baos);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);
quality = Math.max(0, Math.min(quality, 100));
param.setQuality((float) quality/100.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(image);
byte[] result = baos.toByteArray();
baos.close();
return result;
}
我一直在使用ImageIO.write寫的形象嘗試,但未能得到什麼希望。
它具有相同的效果。 – usman 2013-03-26 09:56:42
我想知道我是否可以像上面的代碼一樣追加兩張圖片。我認爲它沒有顯示,因爲在字節寫入第一個圖像文件結尾發生時,它馬上終止寫入過程並關閉流? – usman 2013-03-26 11:18:51
感謝您的幫助。但是仍然有問題爲什麼不能直接從OutputStream寫入。文件問題是ENd嗎? – usman 2013-03-27 07:11:58