此代码尝试调整名为“ imgs”的目录中图像的大小。不幸的是,由于某些原因,当我取消注释listFiles(..)循环时,ImageIO.read(sourceImageFile)
将返回null。但是在循环(res("imgs/foto_3.jpg")
)之外直接处理同一文件仍然有效。因此,显然,此循环阻止了文件的读取。解决方案?
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import static org.imgscalr.Scalr.*;
public class App {
public static void main(String[] args) throws IOException {
// for (File sourceImageFile : new File("imgs").listFiles()) {
// res("imgs/"+sourceImageFile.getName());
// }
res("imgs/foto_3.jpg");
}
public static void res(String arg) throws IOException {
File sourceImageFile = new File(arg);
BufferedImage img = ImageIO.read(sourceImageFile);
BufferedImage thumbnail = resize(img, 500);
thumbnail.createGraphics().drawImage(thumbnail, 0, 0, null);
ImageIO.write(thumbnail, "jpg", new File("resized/" + sourceImageFile.getName()));
}
}
要重现该问题,您可以download the Maven project。
最佳答案
您可以将res
更改为接受File
对象而不是字符串吗?然后,您可以编写以下内容,这要好得多:
for (File sourceImageFile : new File("imgs").listFiles()) {
res(sourceImageFile);
}
关于您的原始问题,请尝试添加一些跟踪语句或使用调试器来查找到底传递给
res
的内容。关于java - 如何调整目录中图像的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9779563/