最近在做项目时需要从oracle读取blob图片列表,显示到jsp页面上。使用以下代码实现,大部分图片显示正常,但是有些图片执行BufferedImage bis = ImageIO.read(is);会报错。求高手指教,这个问题该怎么解决?
报错信息如下:
javax.imageio.IIOException: bogus marker length
主要代码如下:
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
if (rs.next()) {
blob = rs.getBlob(field[1]);
if(blob!=null){
inStream = blob.getBinaryStream();
long nLen = blob.length();
int nSize = (int) nLen;
data = new byte[nSize];
inStream.read(data);
data = changeImgSize(data, width, height);
}
}
/**
*
* 缩小或放大图片
* @param data 图片的byte数据
* @param w 需要缩到的宽度
* @param h 需要缩到高度
* @return 缩放后的图片
*/
public static byte[] changeImgSize(byte[] data, int nw, int nh) {
byte[] newdata = null;
BufferedImage bis = null;
ByteArrayOutputStream baos = null;
try {
InputStream is = new ByteArrayInputStream(data);
bis = ImageIO.read(is);
int w = bis.getWidth();
int h = bis.getHeight();
double sx = (double) nw / w;
double sy = (double) nh / h;
AffineTransform transform = new AffineTransform();
transform.setToScale(sx, sy);
AffineTransformOp ato = new AffineTransformOp(transform, null);
// 原始颜色
BufferedImage bid = new BufferedImage(nw, nh,
BufferedImage.TYPE_3BYTE_BGR);
ato.filter(bis, bid);
// 转换成byte字节
baos = new ByteArrayOutputStream();
ImageIO.write(bid, "jpeg", baos);
newdata = baos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
} finally{
if(null != bis){
bis = null;
}
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return newdata;
}
异常栈贴出来异常贴全店
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。