Java 在文件夹中保存图像时出现问题
我正在开发一个应用程序,需要将图像的缩略图保存在图像所在文件夹内的文件夹中。通过文件选择器选择图像文件夹 我在保存缩略图时遇到问题。它表示错误消息“未找到文件”异常 我编写的代码是:Java 在文件夹中保存图像时出现问题,java,image-processing,file-io,Java,Image Processing,File Io,我正在开发一个应用程序,需要将图像的缩略图保存在图像所在文件夹内的文件夹中。通过文件选择器选择图像文件夹 我在保存缩略图时遇到问题。它表示错误消息“未找到文件”异常 我编写的代码是: import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ThumbnailFactory {
public ThumbnailFactory() {
}
public void run(String folder) {
savepath = folder+"\\thumbnails";
File dir = new File(folder);
for (File file : dir.listFiles()) {
createThumbnail(file);
}
}
private void createThumbnail(File file) {
try {
// BufferedImage is the best (Toolkit images are less flexible)
BufferedImage img = ImageIO.read(file);
BufferedImage thumb = createEmptyThumbnail();
// BufferedImage has a Graphics2D
Graphics2D g2d = (Graphics2D) thumb.getGraphics();
g2d.drawImage(img, 0, 0,
thumb.getWidth() - 1,
thumb.getHeight() - 1,
0, 0,
img.getWidth() - 1,
img.getHeight() - 1,
null);
g2d.dispose();
ImageIO.write(thumb, "PNG", createOutputFile(file));
} catch (Exception e) {
e.printStackTrace();
}
}
private File createOutputFile(File inputFile) throws IOException {
System.out.println(savepath+"\\"+inputFile.getName());
File f = new File(savepath+"\\"+inputFile.getName()+".png");
if(!f.exists())
{
System.out.println("Creating the file in thumbnail directory");
f.createNewFile();
}
return new File(savepath+"\\"+inputFile.getName()+".png") ;
}
private BufferedImage createEmptyThumbnail() {
return new BufferedImage(100, 200,
BufferedImage.TYPE_INT_RGB);
}
private String savepath;
}
它在createOutputFile()
方法的f.createNewFile()
点抛出FileNotFoundException
,NullPointerException
输入文件是选定文件夹中的图像。我必须将此图像的缩略图放置在选定文件夹内创建的文件夹中
比如说,,
所选图像文件夹为D:\pictures
然后我需要在D:\pictures
中的D:\pictures\thumbnails
中放置每个图片的缩略图
请指出我所犯的错误以及如何纠正。我想玩一个最终的静态缩略图,而G2D。。。它不起作用,但如果你能忍受使所有图像大小和形状相同的不均衡结果,不管原始尺寸如何;-) 我很高兴你把它解决了;-)
干杯。基思。我想玩一个最终的静态缩略图,而G2D。。。它不起作用,但如果你能忍受使所有图像大小和形状相同的不均衡结果,不管原始尺寸如何;-) 我很高兴你把它解决了;-)
干杯。Keith.与其自己编写所有代码,不如考虑使用该库。您的整个示例可以用以下几行来编写,这更好地表达了您的意图
public class ThumbnailFactory {
public void run(String folder) {
Thumbnails.of(new File(folder+"\\thumbnails").listFiles())
.size(100,200)
.outputFormat("png")
.asFiles(Rename.SUFFIX_HYPTHEN_THUMBNAIL);
}
}
您可以考虑使用该库,而不是自己编写所有这些代码。您的整个示例可以用以下几行来编写,这更好地表达了您的意图
public class ThumbnailFactory {
public void run(String folder) {
Thumbnails.of(new File(folder+"\\thumbnails").listFiles())
.size(100,200)
.outputFormat("png")
.asFiles(Rename.SUFFIX_HYPTHEN_THUMBNAIL);
}
}
\thumbnails
目录是否已存在?我看不出你在哪里创建它(正如我所预期的)。此外,你不应该明确地处理任何东西。@corlettk-我想他有,因为他说异常在createOutputFile
中,在这种情况下,我会(至少尝试)重用thumb
,它是g2d
,而不是创建“重的”每个pic I进程的垃圾。只是一个想法。。。如果对您的用例足够快,请忽略我。@corlettk:缩略图目录是在将控件传递到此文件之前创建的。\thumbnails
目录是否已经存在?我看不出你在哪里创建它(正如我所预期的)。此外,你不应该明确地处理任何东西。@corlettk-我想他有,因为他说异常在createOutputFile
中,在这种情况下,我会(至少尝试)重用thumb
,它是g2d
,而不是创建“重的”每个pic I进程的垃圾。只是一个想法。。。如果对您的用例足够快,请忽略我。@corlettk:缩略图目录是在将控件传递到此文件之前创建的。我想我应该考虑寻找一个“正确执行”的现有库;-)我想我应该去寻找一个现有的图书馆,它“做得很好”;-)谢谢你的鱼。