我已将一些图像存储在数据库中,而检索它们时我想将其调整为177x122。我怎么能在JAVA中做到这一点? 以下是我用于从数据库中检索图像的一些代码,需要进行哪些更改才能获得177x122的图像。
PreparedStatement pstm1 = con.prepareStatement("select * from image");
ResultSet rs1 = pstm1.executeQuery();
while(rs1.next()) {
InputStream fis1;
FileOutputStream fos;
String image_id;
try {
fis1 = rs1.getBinaryStream("image");
image_id=rs1.getString("image_id");
fos = new FileOutputStream(new File("images" + (image_id) + ".jpg"));
int c;
while ((c = fis1.read()) != -1) {
fos.write(c);
}
fis1.close();
fos.close();
JOptionPane.showMessageDialog(null, "Image Successfully Retrieved");
} catch (Exception ex) {
System.out.println(ex);
}
}
答案 0 :(得分:3)
您可以使用AWT提供的BufferedImage和Graphics2D类来调整图像大小。 Source
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();
答案 1 :(得分:1)
假设image
列中的数据是Java Image I / O可以读取的图像格式(例如JPEG和PNG),Thumbnailator库应该能够实现此目的。< / p>
将ResultSet
中的图像数据作为InputStream
检索并写入指定文件的代码可以这样写:
// Get the information we need from the database.
String imageId = rs1.getString("image_id");
InputStream is = rs1.getBinaryStream("image");
// Perform the thumbnail generation.
// You may want to substitute variables for the hard-coded 177 and 122.
Thumbnails.of(is)
.size(177, 122)
.toFile("images" + (imageId) + ".jpg");
// Thumbnailator does not automatically close InputStreams
// (which is actually a good thing!), so we'll have to close it.
is.close();
(我应该声称我实际上并没有针对实际数据库运行此代码。)
Thumbnailator将从InputStream
列中检索image
检索二进制数据中的图像数据,然后调整图像大小以适应172 x 122区域,最后将缩略图输出为JPEG指定的文件。
默认情况下,Thumbnailator会在调整图像大小时保留原始图像的纵横比(以防止缩略图看起来失真),因此图像大小不一定是172 x 122.如果不希望出现这种情况,请调用{ {1}}方法代替forceSize
方法可以实现这一目标。
免责声明:我维护了Thumbnailator库。