Redimensionar imagens em lote no Mac OS X sem alterar a data de criação

Redimensionar imagens em lote no Mac OS X sem alterar a data de criação

Tenho muitas imagens para redimensionar, mas não quero alterar a data de criação. Tentei usar Automator, Photoshop, Preview e cada vez que utilizo o software altera a data de criação das minhas fotos.

Se alguém tiver uma ideia?

Responder1

Tenho muitas imagens para redimensionar, mas não quero alterar a data de criação. Tentei usar Automator, Photoshop, Preview e cada vez que utilizo o software altera a data de criação das minhas fotos.

Você está confundindo a data de criação com a data de modificação? Porque, em última análise, a data de criação de um arquivo nunca deve mudar se um arquivo for modificado; é para isso que serve a data de modificação.

Embora eu não tenha certeza de quais métodos você está usando para redimensionar as imagens, pelo que sei, se você estiver pegando um diretório de imagens - e depois instruindo um script para criar uma imagem derivada com base na imagem de origem - a imagem derivada recém-criada teria uma nova data de criação porque seria simplesmente uma nova cópia do original que é processada de alguma forma.

Mas supondo que você tenha um diretório cheio de imagens que deseja processar e, essencialmente, sobrescrever, eu recomendaria instalar e usar a excelente ferramenta de linha de comandoImagemMagick. Se você não se sentir confortável em instalar o ImageMagick para Mac OS X por meio dos binários oficiais - que funcionam bem, mas podem ser confusos se você não for fluente em linhas de comando - issoexiste um bom instalador de pacote para Mac OS X fornecido pela Cactuslab. Ou você pode até instalar o ImageMagick viaCerveja caseirainstalando-o e executando brew install imagemagicka partir da linha de comando para instalar o ImageMagick.

Uma vez instalado, você pode executar um script Bash simples como este que usafindcom o ImageMagickconvertferramenta de comando para processar as imagens:

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

Neste exemplo, o script procurará o Pics/diretório na área de trabalho do usuário de trabalho e, em seguida, procurará quaisquer arquivos Pics/que tenham uma extensão JPG, JPEG, PNG, TIF ou TIFF conectada a eles; a pesquisa não diferencia maiúsculas de minúsculas, portanto versões em minúsculas também serão encontradas. Assim que uma imagem for encontrada, ele converterá o DPI da imagem para 72 e fará isso usando unidades PPI (Pixels por polegada) e redimensionará a imagem para 1500x1500 pixels de largura/altura com base no lado mais longo da imagem se a imagem for maior que 1500 pixels em qualquer que seja o lado mais longo. A qualidade da imagem também está definida para 90.

Eu uso este script Bash simples para processar imagens que desejo que tenham uma resolução relativamente alta e que também estejam prontas para a web. Mas você pode ajustar e ajustar esse comando para atender às suas necessidades. A verdadeira mágica é a findlógica que percorrerá a árvore de diretórios e substituirá as imagens no lugar. E ao fazer isso a data de criação é mantida e apenas a data de modificação é alterada no arquivo.

Responder2

Como passei algumas horas tentando descobrir por que algumas das minhas fotos foram convertidas sem preservação de data, mesmo com mogrify -define preserve-timestamp=true, aqui está o que descobri:

Relatório

Parece que o arquivo “data de nascimento” tem sua importância (principalmente para Apple Photos). Você pode acessá-lo através de: stat -x pic.jpge obterá algo assim:

  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 !

Ferramentas

stat

Como eu disse, o preserve-timestampdon não parece preservar a data de nascimento, então estou usando stato comando para obter a data de nascimento:

$ 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

e exiftoolpara salvá-lo no arquivo convertido:

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

Resultado como uma linha

Aqui está um exemplo de como estou convertendo jpgpara heic, depois de exportá-los do Apple Photos (de uma pasta inteligente, a filtragem no nome do arquivo inclui "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

É bem lento (30+min para 1700 fotos / 1,5 Go…), mas consigo o resultado que procurava, com exatamente a mesma data de nascimento (e uma redução de tamanho de 1,5Go para 530Mo). Posso adicionar as heicfotos no Apple Photo e elas serão colocadas no lugar certo. Esperando que isso possa ajudar!

informação relacionada