缩放文件夹中的图像



>我正在尝试使用文件选择器调整图片大小。似乎一切都是文件,但是添加文件夹后我无法打开它。

public void metodAddpath(String fullPath)  {
try {
File sourceFile = new File(fullPath);               
BufferedImage bufferedimage = ImageIO.read(sourceFile);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(bufferedimage, "jpg", os);
InputStream is = new ByteArrayInputStream(os.toByteArray());
FileOutputStream fileOutputStream = new FileOutputStream(
sourceFile);
int bufferSize;
byte[] bufffer = new byte[512];
while ((bufferSize = is.read(bufffer)) > 0) {
fileOutputStream.write(bufffer, 0, bufferSize);
}
is.close();
fileOutputStream.close();             
//scaleImage(bufferedimage, 220, 220);  
} catch(Exception e) {
e.printStackTrace();
}

} 按下按钮将图像保存在文件夹中后。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
Database base = new  Database();
metodAddpath(jTextField1.getText());
base.addPictureResource(jTextField1.getText());
}

但是当我尝试将其添加到文件夹中时,出现了错误。

我只是要出来说出来,这些都不是...

try {
File sourceFile = new File(fullPath);               
BufferedImage bufferedimage = ImageIO.read(sourceFile);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(bufferedimage, "jpg", os);
InputStream is = new ByteArrayInputStream(os.toByteArray());
FileOutputStream fileOutputStream = new FileOutputStream(
sourceFile);
int bufferSize;
byte[] bufffer = new byte[512];
while ((bufferSize = is.read(bufffer)) > 0) {
fileOutputStream.write(bufffer, 0, bufferSize);
}
is.close();
fileOutputStream.close();             
//scaleImage(bufferedimage, 220, 220);  
} catch(Exception e) {
e.printStackTrace();
}

意义。

您正在读取图像,将其写入ByteArrayOutputStream,将其通过InputStream管道,然后通过FileOutputStream将内容写入另一个文件......为什么?!

像...

File sourceFile = new File(fullPath);               
try {
BufferedImage bufferedimage = ImageIO.read(sourceFile);
//scaleImage(bufferedimage, 220, 220);  
// Beware, this is overwriting the existing file
try (FileOutputStream fileOutputStream = new FileOutputStream(sourceFile)) {
ImageIO.write(bufferedimage, "jpg", fileOutputStream);
}
} catch(Exception e) {
e.printStackTrace();
}

会做同样的工作,更容易阅读,可能更有效率......

我怀疑这会回答你的问题,但它可能会减少一些困惑

最后,我找到了在保存到文件夹中之前如何缩放图像的方法。首先,我想为按钮添加一个侦听器并使用文件选择器获取图像。

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
JFileChooser file = new JFileChooser();
file.setCurrentDirectory(new File(System.getProperty("user.home")));
FileNameExtensionFilter filter = new FileNameExtensionFilter("*.Images", "jpeg", "jpg", "png"); 
file.addChoosableFileFilter(filter);
int result = file.showSaveDialog(null);
if(result ==JFileChooser.APPROVE_OPTION) {
File selectedFile = file.getSelectedFile();
//GET ABSOLUTE PATH OF PICTURES
jTextField1.setText(selectedFile.getAbsolutePath());
//addPicture.setText(selectedFile.getName()); 
//GET NAME OF PICTURES
//getPicName = selectedFile.getName();

} else if(result == JFileChooser.CANCEL_OPTION) {
System.out.println("File not found!");
}
}

在我为另一个负责将图片添加到文件夹的按钮添加侦听器之后。这是我的代码:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
try{
addPicture(jTextField1.getText());
}catch(Exception e) {
e.printStackTrace();
}
} 

最后,让我们添加两个函数:

public void addPicture(String fullPath) throws IOException {
File sourceFile = new File(fullPath);               
try {
BufferedImage bufferedimage = ImageIO.read(sourceFile);
// add method scaleImage(bufferedimage, 220, 220) in ImageIO.write(scaleImage(bufferedimage, 220, 220), "jpg", fileOutputStream)  
try (FileOutputStream fileOutputStream = new FileOutputStream("/my files/NetBeans IDE 8.2/NewDataBase/src/newdatabase/images/" + sourceFile.getName())) {
ImageIO.write(scaleImage(bufferedimage, 220, 220), "jpg", fileOutputStream);
}
} catch(Exception e) {
e.printStackTrace();
}

添加不要忘记重要的方法

public BufferedImage scaleImage(BufferedImage img, int width, int height) {
int imgWidth = img.getWidth();
int imgHeight = img.getHeight();
if (imgWidth*height < imgHeight*width) {
width = imgWidth*height/imgHeight;
} else {
height = imgHeight*width/imgWidth;
}
BufferedImage newImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = newImage.createGraphics();
try {
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g.clearRect(0, 0, width, height);
g.drawImage(img, 0, 0, width, height, null);
} 
finally {
g.dispose();
}
return newImage;
}  


}

谢谢艾弗里奥内的帮助。我要感谢MadProgrammer。你是个天才,伙计。

最新更新