Мне нужно изменить размер многих изображений, но я не хочу менять дату создания. Я пробовал использовать 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, и они будут размещены в нужном месте. Надеюсь, это поможет!