Проблема с сохранением изображений в папке - PullRequest
0 голосов
/ 15 мая 2011

Я разрабатываю приложение, в котором мне нужно сохранить миниатюры изображения в папке внутри папки, где находятся изображения.Папка с изображениями выбирается с помощью средства выбора файлов.

У меня проблема с сохранением миниатюр.Там написано сообщение об ошибке: файл не найден, исключение.

Код, который я написал:

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() выдается FileNotFoundException, NullPointerException.в точке f.createNewFile().

Входным файлом является изображение в выбранной папке.Я должен поместить эскиз этого изображения в папку, созданную внутри выбранной папки.

Например, папка "Выбранное изображение" - D:\pictures Затем мне нужно поместить миниатюру каждой картинки внутри D:\pictures в D:\pictures\thumbnails.

, пожалуйста, укажите на ошибку, которую я делаюи как это исправить.

Ответы [ 2 ]

2 голосов
/ 15 мая 2011

Вместо того, чтобы писать весь этот код самостоятельно, вы можете использовать библиотеку Thumbnailator .Весь ваш пример может быть записан в следующих нескольких строках, которые гораздо лучше выражают ваши намерения.

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);
    }
}
1 голос
/ 15 мая 2011

Я хотел поиграть с окончательным статическим THUMBNAIL и G2D ... Это не сработало, но это работает, если вы можете жить с непропорциональными результатами, когда все изображения имеют одинаковый размер и, следовательно, форму, независимо из там оригинальных размеров; -)

package forums;

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;

public class ThumbnailFactory
{
  private static final String THUMBNAILS_SUBDIR_NAME = File.separator + "thumbnails";

  private final File _thumbsSubdir;
  private final File _picsDir;

  public ThumbnailFactory(String picsDirectoryPath) {
    _picsDir = new File(picsDirectoryPath);
    _thumbsSubdir = new File(thumbDirectoryPath(_picsDir));
  }

  private static String thumbDirectoryPath(File picsDir) {
    return picsDir.getAbsolutePath()+THUMBNAILS_SUBDIR_NAME;
  }

  public void createThumbnails() throws IOException {
    if (!_thumbsSubdir.exists()) {
      _thumbsSubdir.mkdir();
    }
    for (File picFile : _picsDir.listFiles(
      new FilenameFilter() {
        public boolean accept(File f, String s) {
          return s.toLowerCase().endsWith(".jpg");
        }
      }
    )) {
      if ( !createThumbnail(picFile, new File(thumbFilename(picFile))) )
        break;
    }
  }

  private String thumbFilename(File pictureFile) {
    return _thumbsSubdir.getAbsolutePath()
           + File.separator 
           + pictureFile.getName()
           + ".png";
  }

  private boolean createThumbnail(File pictureFile, File thumbFile)
    throws IOException
  {
    boolean retval = false;
    BufferedImage image = new BufferedImage(100, 200, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = (Graphics2D) image.getGraphics();
    BufferedImage picture = ImageIO.read(pictureFile);
    if (picture!=null) {
      g2d.drawImage(
          picture
        , 0, 0, image.getWidth()-1, image.getHeight()-1
        , 0, 0, picture.getWidth()-1, picture.getHeight()-1
        , null
      );
      retval = ImageIO.write(image, "PNG", thumbFile);
      System.out.println(thumbFile);
    }
    return retval;
  }

  public static void main(String... args) {
    try {
      ThumbnailFactory factory = new ThumbnailFactory("C:/Users/Administrator/Pictures");
      factory.createThumbnails();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

Я рад, что вы разобрались; -)

Приветствия. Кит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...