====== Bilder bearbeiten ====== Laut dem Test "//[[https://www.ctrl.blog/entry/webp-avif-comparison.html|Comparing AVIF vs WebP file sizes at the same DSSIM]]//" kann man gegenüber JPEG bei gleicher Bildqualität durchschnittlich mit WebP ca. 30% und mit AVIF ca. 50% am Plattenplatz sparen. ===== Bildinformationen: Metadaten / EXIF ===== In diesem Abschnitt wird nur beschrieben, wie man sich die Informationen anzeigen lässt, die als Metadaten in der Bilddatei gespeichert sind. Es werden keine Veränderungen an der Bilddatei vorgenommen. Installation von ''exiftool'' (FreeBSD 13.0): > pkg install graphics/p5-Image-ExifTool alle EXIF-Informationen anzeigen: > exiftool -EXIF:ALL 1947_Cadillac_Fleetwood.jpg Ausrichtung eines Bildes auslesen: > exiftool -EXIF:Orientation 1947_Cadillac_Fleetwood.jpg Orientation : Horizontal (normal) > exiftool -EXIF:Orientation CZ85.jpg Orientation : Rotate 180 > exiftool -EXIF:Orientation Regeln_fuer_das_Mensch_sein.jpg Orientation : Rotate 90 CW ==== /home/bin/bild_alle_metadaten_zeigen.sh ==== #!/bin/bash DATEI="${1}" if [ ! -r "${DATEI}" ] ; then echo "${0} [Bilddatei.jpg]" exit 0 fi DATEI="${1}" PHPBIN="$(which php)" if [ -z "${PHPBIN}" ] ; then echo "PHP ist nicht installiert..." exit 1 fi PHPANFANG='' METADAT="$(echo "${PHPANFANG}'${DATEI}'${PHPENDE}" | ${PHPBIN})" echo "${METADAT}" ==== /home/bin/bildformat_zeigen.sh ==== PHP muss natürlich installiert sein! Alternativ geht das auch mit //[[dateiformate_konvertieren#in_ein_einheitsformat_bringen|ImageMagic]]// #!/bin/bash DATEI="${1}" if [ ! -r "${DATEI}" ] ; then echo "${0} [Bilddatei.jpg]" exit 0 fi DATEI="${1}" PHPBIN="$(which php)" if [ -z "${PHPBIN}" ] ; then echo "PHP ist nicht installiert..." exit 1 fi PHPANFANG='' ORFORMAT="$(echo "${PHPANFANG}'${DATEI}'${PHPENDE}" | ${PHPBIN} | egrep '[0-9][x][0-9]')" echo "${ORFORMAT}" ==== /home/bin/bildaufnahmezeit_zeigen.sh ==== Hiermit kann man sich die Uhrzeit anzeigen lassen, zu der das Bild aufgenommen wurde (Auslöserzeitpunkt). #!/bin/bash DATEI="${1}" if [ ! -r "${DATEI}" ] ; then echo "${0} [Bilddatei.jpg]" exit 0 fi PHPBIN="$(which php)" if [ -z "${PHPBIN}" ] ; then echo "PHP ist nicht installiert..." exit 1 fi PHPANFANG='' ORIZEIT="$(echo "${PHPANFANG}'${DATEI}'${PHPENDE}" | ${PHPBIN})" echo "${ORIZEIT}" ===== Bild verändern ===== In diesem Abschnitt wird beschrieben, wie man bestimmte Veränderungen an den Bildern vornimmt. ==== /home/bin/bild_drehen.sh ==== #!/bin/bash if [ -z "${2}" ] ; then echo "${0} [Drehwinkel] [Bild [Bild[...]]]" echo "${0} 90 [Bild [Bild[...]]]" echo "${0} 180 [Bild [Bild[...]]]" echo "${0} 270 [Bild [Bild[...]]]" echo "${0} -90 [Bild [Bild[...]]]" echo "${0} 132.5 [Bild [Bild[...]]]" exit 0 fi if [ -z "$(echo "${1}" | egrep '^[+-]*[0-9]+$|^[+-]*[0-9]+[.][0-9]*$')" ] ; then echo "${0} [Drehwinkel] [Bild [Bild[...]]]" echo "${0} 90 [Bild [Bild[...]]]" echo "${0} 180 [Bild [Bild[...]]]" echo "${0} 270 [Bild [Bild[...]]]" echo "${0} -90 [Bild [Bild[...]]]" echo "${0} 132.5 [Bild [Bild[...]]]" exit 0 else WINKEL="${1}" shift fi IMGMAGC="$(which convert)" if [ -z "${IMGMAGC}" ] ; then echo "ImageMagic ist nicht installiert" exit 1 fi ZUFALLSWERT="$(head -c 1000 /dev/urandom | tr -cd '[:alnum:]' | cut -b-8)" for i in ${@} do VERZ="$(dirname ${i})" DATEI="$(basename ${i})" #echo "convert -rotate ${WINKEL} ${i} ${VERZ}/${ZUFALLSWERT}_${DATEI} && mv -v ${VERZ}/${ZUFALLSWERT}_${DATEI} ${i}" convert -rotate ${WINKEL} ${i} ${VERZ}/${ZUFALLSWERT}_${DATEI} && mv -v ${VERZ}/${ZUFALLSWERT}_${DATEI} ${i} done ==== /home/bin/bilder_resize.sh ==== Mit diesem Script werden PNG-Bilder im PAL-Format erzeugt, um daraus einen Film oder eine Slideshow zu erstellen. #!/bin/bash #------------------------------------------------------------------------------# # # Größe von Bildern ändern # #------------------------------------------------------------------------------# VERSION="v2020012701" if [ ! -r "${2}" ] ; then echo "${0} 720x540 [Bild.jpg]" echo "${0} 720x540 [Bild.jpg] [Bild.jpg]" echo "${0} 720x540 [Bild [Bild[...]]]" exit 0 fi NFORMAT="${1}" shift for DATEI in ${@} do BILD="$(basename ${DATEI} | rev | awk '{sub("[.]"," ");print $2}' | rev)" OFORMAT="$(identify ${DATEI} | awk '{print $3}' || exit 1)" if [ -n "${OFORMAT}" ] ; then echo "convert -size ${OFORMAT} ${DATEI} -resize ${NFORMAT} -background black -compose Copy -gravity center -extent ${NFORMAT} -quality 95 ${BILD}_${NFORMAT}.png" convert -size ${OFORMAT} ${DATEI} -resize ${NFORMAT} -background black -compose Copy -gravity center -extent ${NFORMAT} -quality 95 ${BILD}_${NFORMAT}.png identify ${BILD}_${NFORMAT}.png fi done > time /home/bin/bilder_resize.sh 480x360 *.jpg ==== /home/bin/bilder_bewegen.sh ==== Dieses Script wandelt alle Bilder, die im aktuellen Verzeichnis liegen in eine Video-Datei um. Die Voreinstellungen sind so gewählt, dass der Film das PAL-Bildformat von 720x576 Bildpunkten bekommt und die Bilder in einem DivX5 kompatiblem Format kodiert werden. * [[http://www.mplayerhq.hu/DOCS/HTML/de/menc-feat-enc-images.html]] #!/bin/bash FPS="0.3" # Anzahl der Bilder pro Sekunde # 0.1 bis 1 => Slideshow # 15 bis 30 => Film NEFORMAT="720x576" # neues Format #------------------------------------------------------------------------------# BILDENDG="png" # Zwischenbildformat ZUFALLSWERT="$(head -c 1000 /dev/urandom | tr -cd '[:alnum:]' | cut -c-8)" BILDER="$(ls ${@})" echo "$(ls ${BILDER} | wc -l) Bilder wurden gefunden." #------------------------------------------------------------------------------# KONV="$(which convert)" IDEN="$(which identify)" if [ -z "${KONV}" -o -z "${IDEN}" ] ; then echo "ImageMagic muss installiert sein!" exit 1 fi if [ -z "${BILDER}" ] ; then echo "${0} *" echo "${0} *.jpg" echo "${0} 2002000000.jpg 2003080000.jpg 2003080006.jpg 2003101401.jpg" exit 0 fi #------------------------------------------------------------------------------# NR="0" for i in ${BILDER} do BILDBN="$(basename ${i} | rev | awk '{sub("[.]"," ");print $2}' | rev)" OFORMAT="$(identify ${i} | awk '{print $3}' || exit 1)" if [ -n "${OFORMAT}" ] ; then NR="$(echo "${NR}" | awk '{printf("%.8u\n", 1+$1)}')" convert -size ${OFORMAT} ${i} -resize ${NEFORMAT} -background black -compose Copy -gravity center -extent ${NEFORMAT} -quality 95 ${NR}_${BILDBN}_${NEFORMAT}_${ZUFALLSWERT}.${BILDENDG} #identify ${NR}_${BILDBN}_${NEFORMAT}_${ZUFALLSWERT}.${BILDENDG} ls -lh ${NR}_${BILDBN}_${NEFORMAT}_${ZUFALLSWERT}.${BILDENDG} fi done ################################################################################ # erste Datei wird überprüft EDATEI="$(ls *_${NEFORMAT}_${ZUFALLSWERT}.${BILDENDG} | head -n1)" if [ ! -r "${EDATEI}" ] ; then echo "Die erste vorbereitete Bilddatei '${EDATEI}' ist nicht lesbar." exit 1 fi TYP="$(identify ${EDATEI} | awk '{print tolower($2)}' | egrep 'jpeg|png|tga|sgi')" if [ -z "${TYP}" ] ; then echo "Der Typ der ersten vorbereiteten Bilddatei '${EDATEI}' konnte nicht ermittelt werden." exit 1 fi FORMAT="$(identify ${EDATEI} | awk '{print tolower($3)}')" if [ -z "${FORMAT}" ] ; then echo "Der Typ der ersten vorbereiteten Bilddatei '${EDATEI}' konnte nicht ermittelt werden." exit 1 fi if [ "${NEFORMAT}" != "${FORMAT}" ] ; then echo "Das Format der ersten vorbereiteten Bilddatei '${EDATEI}' stimmt nicht." exit 1 fi BREIT="$(echo ${FORMAT} | awk '{gsub("x"," ");print $1}')" HOCH="$(echo ${FORMAT} | awk '{gsub("x"," ");print $2}')" #------------------------------------------------------------------------------# AUSBR="$(echo "${FORMAT} ${FAKTOR}" | awk '{gsub("x"," ");print $1 * $2 * $3}')" mencoder -ovc lavc -lavcopts vcodec=mpeg4 mf://*_${NEFORMAT}_${ZUFALLSWERT}.${BILDENDG} -mf type=${TYP}:w=${BREIT}:h=${HOCH}:fps=${FPS} -nosound -o ${NEFORMAT}_${ZUFALLSWERT}.avi rm -f *_${NEFORMAT}_${ZUFALLSWERT}.${BILDENDG} ls -lh ${NEFORMAT}_${ZUFALLSWERT}.avi