Я не уверен, почему итерация списка файлов будет мешать генерации миниатюр, но вы в частном порядке упомянули мне, что используете imgscalr и вам было любопытно, какой правильный код для пакетной обработки каталога будетПохоже, поэтому я написал этот пример кода для вас.
Код ниже будет обрабатывать любой каталог (imgs
жестко запрограммирован для соответствия вашему примеру кода) и записывать его в любой другой каталог(resized
используется для обеспечения согласованности - не стесняйтесь менять любой каталог)
import static org.imgscalr.Scalr.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ScaleDirExample {
public static void main(String[] args) throws IOException {
File[] images = new File("imgs").listFiles();
for (File f : images) {
System.out.println("Processing: " + f.getName() + "...");
if (f.isDirectory()) {
System.out.println("\tSkipping, file is a directory...");
continue;
} else
process(f);
}
}
private static void process(File file) throws IOException {
// Load image.
BufferedImage image = ImageIO.read(file);
// Resize image.
image = resize(image, 500);
// Save the resized image as the thumbnail.
saveThumbnail(file, image);
}
private static void saveThumbnail(File originalFile, BufferedImage thumbnail)
throws IOException {
String filename = originalFile.getName();
// Determine file extension.
String fileExt = filename.substring(filename.lastIndexOf('.') + 1);
// Save the thumbnail to the resized dir.
ImageIO.write(thumbnail, fileExt, new File("resized/" + filename));
}
}
Вызов resize(image, 500)
можно изменить для соответствия любому из Scalr.resize методов - вы можете пропустить фильтры или улучшить качество, если хотите.
Пример вывода из моей тестовой установки выглядит следующим образом:
Processing: flower-dog-gimp.jpg...
Processing: flower-dog.jpg...
Processing: logoOXdaComida.png...
Processing: mr-t-thumbnail.jpg...
Processing: mr-t.jpg...
Processing: problem-trans-peter-griffin.png...
Надеюсь, это поможет!