Batch: Automatisches wandeln, bearbeiten und uploaden für Bilddateien

Duefi

Enthusiast
Thread Starter
Mitglied seit
01.08.2004
Beiträge
1.159
Hallo.

Ich hab ein Batch-Skript für Linux geschrieben.

Es soll das ewig einzelne Bildbearbeiten und anschließendes Hochladen für Foren erleichtern. Es bearbeitet einen Ordner von Bildern und lädt diesen dann auf einen Server hoch.

Das Skript basiert auf imagemagick. Es ist multifunktional ausgelegt. Die einzelnen Funktionen können getrennt an und abgeschaltet werden.

Liste der Funktionen
  • Verkleinert Bilder
  • erstellt Thumbnails
  • Kann Bilder automatisch drehen (anhand von EXIF Daten aus dem Bild)
  • Fügt einen Rahmen ein
  • Fügt ein Wasserzeichen ein
  • Fügt einen beliebigen Text ein
  • lädt den erstellten Ordner via ssh (ftp und xs.to kommt noch) hoch.

Voraussetzungen:
Imagemagick und ssh bzw. openssh

Installation:
Angehängten Code in eine Textdatei einfügen.
Ausführbar machen mittels chmod 755 %datei%

Ausführung:
./%datei% pfad/zum/Ordner

To-Do:
FTP und xs.to als Upload-Möglichkeit hinzufügen.
Code verbessern.

Ich würde mich freuen, wenn ihr das Skript mal ausprobieren könntet. Es ist auf einer Ubuntu Feisty Kiste geschrieben, wie es sich auf anderen Systemen verhält konnte ich leider (noch) nicht testen.

Hier nun der Code:
Code:
#!/bin/bash

###Writen by C.Dueformantel
###Christian at dueformantel.de
###Grundeinstellungen###
text_allow="1"							#Erstellung eines Copyright Textes. "0" = nein, "1" = ja. Default: "1"
pic_allow="1"							#Einfuegen . "0" = nein, "1" = ja. Default: "1"
thumbs_allow="1"						#Erstellung von Thumbnails. "0" = nein, "1" = ja. Default: "1"
small_allow="1"							#Erstellung von verkleinerten Bildern. "0" = nein, "1" = ja. Default: "1"
support_format=( JPG jpg png gif )				#Unterstuetzte Dateiformate Default: ( JPG jpg png gif )
auto_orient="0"							#Orientiert die Bilder an Hand der EXIF-Infomationen im Bild. "0" = nein, "1" = ja. Default: "0" 
upload_type="scp"						#Auswahl der Upload-Formen "scp": Upload via ssh, "ftp": Upload via ftp, "non": Kein Upload. Default: "scp" 			

###Ordnereinstellungen###
ordner_name=$(date "+%d-%m-%Y")					#Erstellung des Ordnernames mittels des akutellen Datums. Default: $(date '+%d-%m-%Y')
thumbs="thumbs"							#Ordnername fuer die Thumbnail Bilder. Default: "thumbs"
small="small"							#Ordnername fuer die verkleinerten Bilder. Default: "small"

###Bildeinstellungen###
thumbs_size="400x400"						#Groesse der Thumbnail Bilder. Default: "200x200"
thumbs_quality="70"						#Qualitaet der Thumbnail Bilder. Default: "70"
small_size="1024x768"						#Groesse der verkleinerten Bilder. Default: "1024x768"
small_quality="80"						#Qualitaet der verkleinerten Bilder. Default: "80"
frame_allow="1"							#Erstellung eines Rahmens um das Bild. "0" = nein, "1" = ja. Default: "1"
frame_color="#000000"						#Farbe des Rahmens. Default:"#000000"
frame_size="5x5"						#Groesse des Rahmens. Default:"5x5"
vorlage=""		#Pfad des Schriftzuges. Default: "/home/user/schriftzug.png"
pic_position="Southeast"					#Position des Schriftzuges. Zusammengesetzt aus den Himmelsrichtungen. Default: "Southeast"
text_positon="20,20"						#Postion des Copyright Textes, in Pixel. Beginnend im oberen linken Eck. Default: "20,20"
cr_text="Copyright by user"					#Copyright Text. Default:"Copyright by User"

###Uploadeinstellungen###
upload_user=""						#User fuer den Upload
upload_server=""					#Ip oder Domain des Servers
upload_path=""	#Pfad zum Bilder Ordner

#####Funktionen#####

#function: orientation
#Prueft ob EXIF Infomationen vorhanden sind und dreht das Bild anschließend in das richtige Format

function orientation
{
 if [ $auto_orient == "1" ] ;
 then
 {
  orient=$(identify -format '%[exif:orientation]' $file)
  case "$orient" in 
	1) echo $file hat richtige Ausrichtung;;
	4) convert $file -rotate 180  $file;;
	6) convert $file -rotate 270  $file;;
	8) convert $file -rotate 90  $file;;
	*) echo Ausrichtung für $file nicht ermittelbar!;;
  esac
 }
 fi
}

#function:upload
#Laedt die aktuell umgewandelten Daten auf den Server hoch.

function upload
{
 case "$upload_type" in
	ftp) echo noch nicht eingebaut;;
	scp) scp -r $ordner_name $upload_user@$upload_server:$upload_path;;
	*) echo kein Upload gewählt;;
 esac
}

#funktion: umwandeln
#Umwandlungsfunktion, Fügt Copyright hinzu, zeichnet Rahmen, erstellt Thumbnails und verkleinert Bilder
 
function umwandeln
{
if [ $text_allow == "1" ] ;
then
 convert $file -font Helvetica -pointsize 25 -fill grey -draw "text $text_positon '$cr_text'" $file
fi

if [ $pic_allow == "1" ] ;
then
 composite -gravity Southeast -compose src-over $vorlage $file $file
fi

if [ $frame_allow == "1" ] ;
then
 convert $file -mattecolor "$frame_color" -frame $frame_size $file
fi

if [ $thumbs_allow == "1" ] ;
then
 convert $file -resize $thumbs_size -quality $thumbs_quality $thumbs/t_$file
fi

if [ $small_allow == "1" ] ;
then
 convert $file -resize $small_size -quality $small_quality $small/s_$file
fi

echo $file umgewandelt!

}

#####Funktionen End#####

#Wechselt in das angegebene Verzeichnis
cd $1

#Erstellung des Umwandlungsordners
mkdir $ordner_name

#Kopieren der unterstützten Bilddateien
cp *.JPG *.jpg *.png *.gif $ordner_name

#Erstellung des Thumbs-Ordners
if [ $thumbs_allow == "1" ] ;
then
 mkdir $ordner_name/$thumbs
fi

#Erstellung des Small-Ordners
if [ $small_allow == "1" ] ;
then
 mkdir $ordner_name/$small
fi

#Wechselt in das erstellte Verzeichnis
cd $ordner_name


format_count=${#support_format[@]} 
for ((a=0; a < $format_count; a++))
do
{
	format=${support_format[$a]}
	for file in *.$format 
	do
	 {
	  orientation
 	  umwandeln
	 }
	done
	
}
done

cd ..

upload
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Schön. Hab mir selber eine kleine Form davon für mein Blog geschrieben um die Bilder dafür aufzuarbeiten.

Werde deins mal ausprobieren.
 
Hoi.

@[g]nex: Wäre nett wenn es Rückmeldung geben würde. Vielleicht kann man noch ein wenig was verbessern.

@kenen: Ob Batch oder Skript ist vollkommen Wurst. Eigentlich ist das für mich die ursprüngliche Form von einer Stapelverarbeitung. Deswegen auch Batch.
Das Einzige was ich es nicht nennen würde, ist dass es ein "Programm" wäre.

Ich hab mich ganz bewusst, für Bash Script entschieden, da es halbwegs schnell und sauber funktioniert. Python, wie von dir vorgeschlagen, ist meiner Meinung nach mit "Kanonen auf Spatzen geschossen". Das Skript ist ja nur wegen den Abfragen so aufgebläht. Man könnte daraus sicher auch einen 5 Zeiler machen, dann eben nicht so "komfortabel" zum einstellen.

Der Einsatz des Skriptes ist eher der Heimgebrauch. Ausgelegt auf gelegentliches Uploaden um paar! Bilder zu nutzen. Auf meinem Testsystem mit nem Celeron 1,8 GHz braucht das Skript keine 2 min um mit automatischen Drehen 15 MB an Bilder zu bearbeiten. Mit gimp-skript hatte alleine nur das skalieren und Zusammenfügen doppelt so lange gebraucht. Deswegen bin ich insofern schon sehr zufrieden.

Würde mich freuen wenn auch du noch paar Verbesserungen anbringen könntest, wenn dich nochwas stört bzw. es nicht richtig läuft.

Gruß Duefi
 
Habe gerade deine Antwort im iPhone Thread gelesen und bin dann wieder auf den Thread gestossen.

Verbesserung ja ich hab dein Script noch nihct ausprobiert. Aber meines habe ich jetzt mit Zenity umgeschrieben so das man mit einer kleinen Dialog geführten Oberfläche arbeiten kann. Ist ja nicht jeder so ein Consolen Freak wie ich.
 
Hallo [g]nex.

Bin inzwischen auch etwas davon ab. Es geht noch einfacher.

Ich bin gerade dabei eine PHP Version davon zu machen, die mir die Dateien als *.zip abnimmt und sie dann nach einem Muster sortiert und ablegt.

Angedacht, ist noch die Integration in ein Gallerie System. Jedoch weiß ich noch nicht ob ich eins selber schreiben soll, oder es in ein Bestehendes integriert werden soll, bzw. einfach integrierbar ist.

Bin gerade auf der Suche nach einem Blog System, welches System benutzt du?

Angeschaut habe ich mir bisher:
Drupal
Wordpress
Joomla
und noch einige anderen.

Gruß Duefi
 
Bist mit deinem PHP-Script schon weiter gekommen?

Würde mich mal sehr dafür interessieren. ;)

Dein Bash oder Shell-Script (nennt es, wie ihr mögt :fresse:) werde ich bei Gelegenheit mal ausprobieren. :)
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh