Stapelweise Größenänderung von Bildern in Mac OS X ohne Änderung des Erstellungsdatums

Stapelweise Größenänderung von Bildern in Mac OS X ohne Änderung des Erstellungsdatums

Ich muss die Größe vieler Bilder ändern, möchte aber das Erstellungsdatum nicht ändern. Ich habe versucht, Automator, Photoshop und Vorschau zu verwenden, und jedes Mal, wenn ich diese verwende, ändert die Software das Erstellungsdatum meiner Bilder.

Hat jemand eine Idee?

Antwort1

Ich muss die Größe vieler Bilder ändern, möchte aber das Erstellungsdatum nicht ändern. Ich habe versucht, Automator, Photoshop und Vorschau zu verwenden, und jedes Mal, wenn ich diese verwende, ändert die Software das Erstellungsdatum meiner Bilder.

Verwechseln Sie das Erstellungsdatum mit dem Änderungsdatum? Denn letztendlich sollte sich das Erstellungsdatum einer Datei niemals ändern, wenn die Datei geändert wird. Dafür gibt es das Änderungsdatum.

Ich bin zwar nicht sicher, welche Methoden Sie zum Ändern der Bildgröße verwenden, aber meines Wissens nach hätte das neu erstellte abgeleitete Bild ein neues Erstellungsdatum, wenn Sie ein Verzeichnis mit Bildern nehmen und dann einem Skript sagen, es solle auf Grundlage des Quellbilds ein abgeleitetes Bild erstellen, weil es lediglich eine neue Kopie des Originals wäre, die in irgendeiner Weise bearbeitet wurde.

Aber vorausgesetzt, Sie haben ein Verzeichnis voller Bilder, die Sie verarbeiten und – im Wesentlichen – überschreiben möchten, würde ich empfehlen, das hervorragende Befehlszeilentool zu installieren und zu verwendenBildMagick. Wenn Sie sich nicht sicher sind, ob Sie ImageMagick für Mac OS X über die offiziellen Binärdateien installieren möchten – die zwar gut funktionieren, aber verwirrend sein können, wenn Sie nicht mit der Kommandozeile vertraut sind –,Es gibt ein nettes Mac OS X-Paketinstallationsprogramm, das von Cactuslab bereitgestellt wird.. Oder Sie können ImageMagick sogar über installierenSelbstgebrautesindem Sie es installieren und dann brew install imagemagickImageMagick von der Befehlszeile aus installieren.

Nach der Installation können Sie ein einfaches Bash-Skript wie dieses ausführen, dasfindmit dem ImageMagickconvertBefehlstool zum Verarbeiten der Bilder:

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

In diesem Beispiel sucht das Skript nach dem Pics/Verzeichnis auf dem Desktop Ihres Arbeitsbenutzers und dann nach allen darin enthaltenen Dateien Pics/mit der Erweiterung JPG, JPEG, PNG, TIF oder TIFF. Bei der Suche wird nicht zwischen Groß- und Kleinschreibung unterschieden, sodass auch Versionen in Kleinbuchstaben gefunden werden. Sobald ein Bild gefunden wurde, wird die DPI des Bildes in 72 konvertiert und dies erfolgt in PPI-Einheiten (Pixel pro Zoll). Die Größe des Bildes wird auf 1500 x 1500 Pixel Breite/Höhe basierend auf der längsten Seite des Bildes angepasst, wenn das Bild auf dieser längsten Seite größer als 1500 Pixel ist. Die Bildqualität wird ebenfalls auf 90 eingestellt.

Ich verwende dieses einfache Bash-Skript, um Bilder zu verarbeiten, die eine relativ hohe Auflösung haben und dennoch webfähig sein sollen. Sie können diesen Befehl jedoch an Ihre Bedürfnisse anpassen und optimieren. Die wahre Magie liegt in der findLogik, die den Verzeichnisbaum durchläuft und Bilder an Ort und Stelle überschreibt. Dabei bleibt das Erstellungsdatum erhalten und nur das Änderungsdatum der Datei wird geändert.

Antwort2

Ich habe einige Stunden damit verbracht, herauszufinden, warum einige meiner Bilder trotz ohne Datumserhaltung konvertiert wurden. mogrify -define preserve-timestamp=trueHier ist, was ich herausgefunden habe:

Bericht

Es scheint, dass die Datei „Geburtsdatum“ eine gewisse Bedeutung hat (insbesondere für Apple Photos). Sie können darauf zugreifen über: stat -x pic.jpgund Sie erhalten etwa Folgendes:

  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 !

Werkzeuge

stat

Wie ich bereits sagte, preserve-timestampscheint das Geburtsdatum nicht erhalten zu bleiben, daher habe ich statden folgenden Befehl verwendet, um das Geburtsdatum abzurufen:

$ 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

und exiftoolum es in der konvertierten Datei zu speichern:

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

Ergebnis als Einzeiler

jpgHier ist ein Beispiel, wie ich es konvertiere heic, nachdem ich es aus Apple Photos exportiert habe (aus einem intelligenten Ordner, der nach Dateinamen gefiltert wird, die „jpg“ enthalten):

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

Es ist ziemlich langsam (30+min für 1700 Bilder / 1,5 GB…), aber ich bekomme das gewünschte Ergebnis mit genau demselben Geburtsdatum (und einer Größenreduzierung von 1,5 GB auf 530 MB). Ich kann die heicBilder in Apple Photo hinzufügen und sie werden an der richtigen Stelle platziert. Hoffe, das könnte helfen!

verwandte Informationen