在java中 查询一个表的 图片字段(blob类型)
判断该图片大小,如果大于100K,那么就把该图片处理成100K
我现在做到获取该图片
但是 处理图片大小遇到了问题
出现错误的地方:src = javax.imageio.ImageIO.read(inputStream);
我的代码如下
package com.hinge.tools;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.hinge.eis.db.DataAccess;
import com.hinge.eis.db.DataAccessOra;
public class ImageDx {
public static void main(String[] args) {
DataAccess dataccess = new DataAccessOra();
Connection conn = dataccess.getConnection();
PreparedStatement ps2 = null;
PreparedStatement stmt = null;
ResultSet rs2 = null;
try {
conn.setAutoCommit(false); // 第一步:插入一个空的CLOB
String sql2 = "select PHOTO,PERSON_ID from hr_person where rownum >=1 and rownum <2order by person_id for update ";
ps2 = conn.prepareStatement(sql2);
stmt = conn.prepareStatement(sql2);
rs2 = ps2.executeQuery();
String personid=null;
stmt =conn.prepareStatement("update hr_person set photo =empty_blob() where person_id =?");
while (rs2.next()) {
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs2.getBlob("PHOTO");
personid = rs2.getString("PERSON_ID");
stmt.setString(1,personid);
stmt.executeUpdate();
stmt.close();
//String content = out.toString();
InputStream input =blob.getBinaryStream();
OutputStream os = blob.getBinaryOutputStream();
BufferedOutputStream output = new BufferedOutputStream(os);
float f=100;
String content = processImage(input,f);
// 写,向数据库写图片
OutputStream out = null;
int blobsize = (int)content.length();
byte[] blobbytes = new byte[blobsize];
int bytesRead = 0;
out.write(blobbytes, 0, blobsize);
os.close();
out.close();
input.close();
}
stmt.executeBatch();
conn.commit();
if (stmt != null)
stmt.close();
if (rs2 != null)
rs2.close();
if (ps2 != null)
ps2.close();
if (conn != null)
conn.close();
} catch (Exception e) {
try {
conn.rollback();
} catch (Exception ex) {
e.printStackTrace();
}
e.printStackTrace();
}
finally{
try {
if (stmt != null)
stmt.close();
if (rs2 != null)
rs2.close();
if (ps2 != null)
ps2.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private static String processImage(InputStream inputStream, float tagsize) {
try {
java.awt.Image src = null;
if (inputStream == null) {
} else
src = javax.imageio.ImageIO.read(inputStream);
if (src == null)
return null;
// float tagsize = 200;
int old_w = src.getWidth(null); //
int old_h = src.getHeight(null);
int new_w = 0;
int new_h = 0; //
float tempdouble = old_w / tagsize;
if (tempdouble < 1)//
tempdouble = (float) 1.0;
new_w = Math.round(old_w / tempdouble);
new_h = Math.round(old_h / tempdouble);//
BufferedImage tag = new BufferedImage(new_w, new_h,
BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src, 0, 0, new_w, new_h, null); //
return tag.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
出现错误的地方:src = javax.imageio.ImageIO.read(inputStream);
问题补充:src 这个为null
原来我对文件图片处理时候
src = javax.imageio.ImageIO.read(inputStream); 这个地方没有问题
2010年12月29日 13:20