Пакетное изменение размера изображений в Mac OS X без изменения даты создания

Пакетное изменение размера изображений в Mac OS X без изменения даты создания

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

Если у кого-то есть идея?

решение1

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

Вы путаете дату создания с датой изменения? Потому что в конечном итоге дата создания файла никогда не должна меняться, если файл изменен; для этого и нужна дата изменения.

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

Но если у вас есть каталог, заполненный изображениями, которые вы хотите обработать и, по сути, перезаписать, я бы рекомендовал установить и использовать отличный инструмент командной строкиImageMagick. Если вам некомфортно устанавливать ImageMagick для Mac OS X через официальные двоичные файлы, которые работают хорошо, но могут быть запутанными, если вы не очень хорошо разбираетесь в командной строке, то этохороший установщик пакетов Mac OS X существует, предоставлен Cactuslab. Или вы даже можете установить ImageMagick черезДомашнее пивоустановив его и запустив brew install imagemagickиз командной строки для установки ImageMagick.

После установки вы можете запустить простой скрипт Bash, например, такой, который используетfindс ImageMagickconvertкомандный инструмент для обработки изображений:

find -E 'Desktop/Pics' -type f -iregex '.*\.(JPG|JPEG|PNG|TIF|TIFF)$' |\
  while read FULL_IMAGE_PATH
  do
    convert -density 72 -units PixelsPerInch -resize "1500x1500>" -quality 90 "${FULL_IMAGE_PATH}" "${FULL_IMAGE_PATH}"
  done

В этом примере скрипт будет искать каталог Pics/на рабочем столе вашего рабочего пользователя, а затем искать в Pics/нем все файлы с расширением JPG, JPEG, PNG, TIF или TIFF, связанные с ними; поиск нечувствителен к регистру, поэтому будут найдены и версии со строчными буквами. Как только изображение будет найдено, он преобразует DPI изображения в 72 и сделает это с использованием единиц PPI (пиксели на дюйм) и изменит размер изображения до 1500x1500 пикселей в ширину/высоту на основе самой длинной стороны изображения, если изображение больше 1500 пикселей по любой из этих самых длинных сторон. Качество изображения также установлено на 90.

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

решение2

Потратив несколько часов на то, чтобы выяснить, почему некоторые из моих фотографий были преобразованы без сохранения даты, даже с помощью mogrify -define preserve-timestamp=true, вот что я обнаружил:

Отчет

Кажется, что файл "дата рождения" имеет свое значение (особенно для Apple Photos). Вы можете получить к нему доступ через: stat -x pic.jpgи вы получите что-то вроде этого:

  File: "pic.jpg"
  Size: 186321       FileType: Regular File
Access: Thu Apr 11 09:19:19 2024
Modify: Tue Jan  5 09:14:41 2021
Change: Thu Apr 11 09:19:18 2024
 Birth: Mon Jan  4 16:40:00 2021 ← here is the important one !

Инструменты

stat

Как я уже говорил, preserve-timestampпохоже, что don не сохраняет дату рождения, поэтому я использую statкоманду, чтобы получить дату рождения:

$ stat -f "%SB" -t "%Y:%m:%d %T%z" pic.jpg
2021:01:04 16:40:00+0100 ← to get a clean birth date
$ stat -f "%Sm" -t "%Y:%m:%d %T%z" pic.jpg
2021:01:05 09:14:41+0100 ← to get a clean modify date

exiftool

и exiftoolсохранить его в преобразованном файле:

exiftool "-FileCreateDate=2021:01:04 16:40:00+0100" "-FileModifyDate= 2021:01:05 09:14:41+0100" pic.heic

Результат в виде однострочного сообщения

Вот пример того, как я конвертирую jpgв heic, после экспорта их из Apple Photos (из смарт-папки, фильтрующей по имени файла «включает «jpg»):

for i in *.jpg ; 
do convert $i "${i%.*}.heic" 
&& exiftool -q "-FileCreateDate=$(stat -f "%SB" -t "%Y:%m:%d %T%z" "$i")" "-FileModifyDate=$(stat -f "%Sm" -t "%Y:%m:%d %T%z" "$i")" "${i%.*}.heic" ; 
done

Это довольно медленно (30+ мин для 1700 фото / 1,5 Go…), но я получаю результат, который искал, с точно такой же датой рождения (и уменьшением размера с 1,5Go до 530Mo). Я могу добавить фотографии heicв Apple Photo, и они будут размещены в нужном месте. Надеюсь, это поможет!

Связанный контент