Я получаю большое количество изображений, представленных разными людьми в нашей компании. Вместо того, чтобы просматривать все вручную, есть ли способ, чтобы изображения, которые имеют высоту / ширину не менее 300dpi и 1800px, не отбрасывались в отдельную папку?
2 ответа
Нет ничего стандартного в этом.
Вам нужен какой-то сценарий, который периодически запускается через папки (-ы) и перемещает файлы, которые не соответствуют вашим критериям, в "отклоненную" папку.
Проще всего, вероятно, написать что-то с помощью ImageMagick.
Это набор (бесплатных) утилит командной строки для преобразования изображений и / или манипулирования ими. Там есть команды для запроса размера / разрешения и цветовой гаммы изображений во многих различных графических форматах.
Команда "идентификации" ImageMagick, вероятно, будет наиболее полезной.
Например:
$ identify rose.jpg
rose.jpg JPEG 640x480 sRGB 87kb 0.050u 0:01
Совет:
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
и он будет вести себя так же, как любой исполняемый файл.