Изменение размера файлов изображений - PullRequest
1 голос
/ 06 мая 2011

У меня много изображений, снятых моей цифровой камерой с очень высоким разрешением 3000 * 4000, и это занимает много места на жестком диске, я использовал Photoshop, чтобы открыть каждое изображение и изменить его размер, чтобы он был с небольшим разрешением, но это требует много времени и усилий

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

Ответы [ 5 ]

7 голосов
/ 06 мая 2011

Вот некоторый код, который я использую в проекте Java-EE (должен работать в обычном приложении для:

int rw = the width I needed;

BufferedImage image = ImageIO.read(new File(filename));

ResampleOp  resampleOp = new ResampleOp(rw,(rw * image.getHeight()) / image.getWidth() );
resampleOp.setFilter(ResampleFilters.getLanczos3Filter()); 
image = resampleOp.filter(image, null);

File tmpFile = new File(tmpName);
ImageIO.write(image, "jpg", tmpFile);

Фильтр повторной выборки поступает из библиотеки java-image-scaling .также содержит фильтры BSpline и Bicubic среди прочих, если вам не нравится Lanczos 3. Если изображения не находятся в цветовом пространстве sRGB, Java тихо преобразует цветовое пространство в sRGB (что случайно было тем, что мне было нужно).

ТакжеJava теряет все данные EXIF, хотя и предоставляет некоторые (очень сложные в использовании) методы для их извлечения. Для правильной цветопередачи вы можете по крайней мере добавить в файл флаг sRGB. Для этого см. здесь .

3 голосов
/ 08 мая 2011

+ 1 к тому, что некоторые другие люди сказали, что для этого не нужна Java, но я думаю, вы, должно быть, знали об этом и, возможно, спрашивали, потому что вы либо хотели написать такую ​​утилиту, либо думали, что это будет весело?

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

Я написал imgscalr , чтобы решить эту проблему;Это очень простой API (один класс, куча статических методов), который хорошо зарекомендовал себя в веб-приложениях и других инструментах, использующих его.

Шаги по изменению размера будут выглядеть примерно так (примерно):

  1. Получить список файлов
  2. BufferedImage image = ImageIO.read (files [i]);
  3. image = Scalr.resize (image, width);
  4. ImageIO.write (image);

Существует множество методов "изменения размера" для вызова Scalr класса , и все они соответствуют исходным пропорциям изображения.Поэтому, если вы масштабируете только с использованием targetWidth (скажем, 1024 пикселя), высота будет рассчитана так, чтобы вы по-прежнему выглядели точно правильно.

Если вы масштабируете с шириной и высотой, но они будут нарушать пропорцииизображения и сделайте так, чтобы он выглядел «растянутым», тогда в зависимости от ориентации изображения (книжной или альбомной) одно измерение будет использоваться в качестве привязки, а другое неправильное измерение будет прозрачно пересчитано для вас.

Существует также множество различных настроек качества и режимов масштабирования FIT-TO, которые вы можете использовать, но библиотека была разработана для того, чтобы всегда «делать правильные вещи», поэтому использовать ее очень просто.

Вы можете копатьисточник, все это Apache 2 лицензируется.Вы можете видеть, что он реализует лучшие практики команды Java2D для масштабирования изображений в Java и педантично очищает себя, так что нет утечки памяти.

Надеюсь, это поможет.

1 голос
/ 07 мая 2011

Вам не нужна Java для этого. Это пустая трата времени и ресурсов. Если у вас есть фотошоп, вы можете сделать это с помощью действий записи: изменить размер партии, используя действия

1 голос
/ 06 мая 2011

AffineTransformOp предлагает дополнительную гибкость выбора типа интерполяции, как показано здесь .

0 голосов
/ 17 августа 2012

Вы можете индивидуально или в пакетном режиме изменить размер с помощью нашего приложения для изменения размера изображения на рабочем столе под названием Sizester.На нашем сайте действует полнофункциональная 15-дневная бесплатная пробная версия (www.sizester.com).

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