Я получаю большое количество изображений, представленных разными людьми в нашей компании. Вместо того, чтобы просматривать все вручную, есть ли способ, чтобы изображения, которые имеют высоту / ширину не менее 300dpi и 1800px, не отбрасывались в отдельную папку?

2 ответа2

2

Нет ничего стандартного в этом.
Вам нужен какой-то сценарий, который периодически запускается через папки (-ы) и перемещает файлы, которые не соответствуют вашим критериям, в "отклоненную" папку.
Проще всего, вероятно, написать что-то с помощью ImageMagick.
Это набор (бесплатных) утилит командной строки для преобразования изображений и / или манипулирования ими. Там есть команды для запроса размера / разрешения и цветовой гаммы изображений во многих различных графических форматах.
Команда "идентификации" ImageMagick, вероятно, будет наиболее полезной.

Например:

$ identify rose.jpg
rose.jpg JPEG 640x480 sRGB 87kb 0.050u 0:01
0

Совет:
ExifTool доступен для окон, и с радостью будет перемещать или копировать файлы на основе метаданных.

Для чего это стоит: "DPI" действует только в отношении ПЕЧАТНЫХ или СКАНИРОВАННЫХ изображений. Значения метаданных, помеченные как "DPI", можно изменить с помощью Exiftool - и не имеет никакого отношения ни к просмотру файлов на компьютере, ни к "качеству" изображения под рукой.

ПРИМЕЧАНИЕ. Многие старые и, возможно, также более новые камеры типа «наводи и снимай» по умолчанию имеют разрешение 72 DPI, которое нельзя изменить в камере.

Тот факт, что, например, Photoshop отображает изображения в размере, зависящем от этого значения, является просто "быком" - заблуждение разработчиков. Все, что вам нужно сделать, это записать "Действие", которое устанавливает значения DPI 300 или более (Resize image) - оно выполняется за доли секунды и сохраняет изображение "как есть"; просто [v] Resample image . С тех пор PS будет пропускать "быка" до разумного уровня.


Пример: создайте файл sortimages.bat с этой единственной строкой в нем.
@exiftool  -jfif:Xresolution=300 -jfif:Yresolution=300 -r -d ..\SortedPictures\%Y\%Y-%m-%d_%%f.%%e "-filename<createdate" %1

Обязательно сохраните его в dir, который присутствует в переменной PATH. Или добавьте, например ;C:\cmd-utils\ в конец PATH, создайте каталог, поместите файл bat в каталог.
Скачайте Exiftool.exe и поместите его в тот же каталог.
Поскольку вы запустили cmd.exe запуск файла bat будет простым sortimages .

С тех пор
cd /d DIR_WHERE_YOUR_IMAGES_LIVE
с последующим
sortimages *.*
будут;

а) сбросить разрешение метаданных до 300 DPI для всех изображений,
б) скопировать изображения в папку с именем SortedPictures - на один шаг вверх в дереве каталогов (= родительский каталог, чтобы избежать конфликтов с текущим заданием).

Каждое изображение будет помещено в подпапку за год съемки и будет иметь имя файла, которое отражает дату и время его съемки.

Небольшое предупреждение: это не надежно, например, изображения, которые не имеют даты создания в метаданных, не будут помещены в новый каталог; для них значения разрешения будут сброшены и скопированы в исходное имя файла, а исходный файл останется на месте с добавлением дополнительного "оригинала", добавленного к имени.

Больше читать:
https://raspberrypi.stackexchange.com/a/14359/17854
Я хочу изменить DPI с помощью ImageMagick без изменения фактического размера байта данных изображения

Exiftool - http://www.sno.phy.queensu.ca/~phil/exiftool/


Теперь отказ от размера может быть проблемой для пользователей cmd.exe (я не вижу простого решения).
Я понятия не имею, насколько хорошо PowerShell справляется с ситуацией - хотя я ожидаю, что он будет «хорошим»:

exiftool -p '$Filename - $ImageSize' *.*
напечатает имена файлов и размеры изображений в простой таблице.


Вот еще один дополнительный; Я не разбираюсь ни в cmd.exe, ни в Powershell, извините.

Автоотклонение в linux или www.cygwin.com с использованием оболочки bash

Выполнение в одну строку ... (убедитесь, что все ; НЕ имеют начальных пробелов)

exiftool  -p '$Filename $ImageWidth $ImageHeight' *.jpg  | ( while read f w h; do if [ "$w" -gt "$h" ]; then t="$h"; h="$w"; w="$t"; fi; echo "$f $h"; if [ "$h" -lt "1800" ]; then mv "$f" "REJECTED_$f"; fi; done )

или как короткий сценарий²:

#!/bin/bash

exiftool  -p '$Filename $ImageWidth $ImageHeight' *.jpg  \
| ( 
  while read f w h; do
    if [ "$w" -gt "$h" ]; then
      t="$h"
      h="$w"
      w="$t"
    fi
    echo "$f $h"
    if [ "$h" -lt "1800" ]; then
      mv "$f" "REJECTED_$f"
    fi
  done )

² создать его; возьмите notepad или nano и введите его, сохраните как файл. Сделайте chmod 755 filename и он будет вести себя так же, как любой исполняемый файл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .