Bildbearbeitung mit Imagemagick: Bild mit Perspektive

Im letzten Beitxrag habe ich erst einmal gezeigt, wie man mit Formidable Pro mittels des Hooks 'frm_after_create_entry' Daten weiter bearbeiten kann. Nun sollen die Daten mittels Imagemagick weierbearbeitet werden, indem dem Bild eine Perspektive hinzugefügt wird. Bevor wir Imagemagick im Aufruf näher betrachten, gehen wir zunächst darauf ein, was eigentlich bei der Transformation eines Bildes in eine Perspektivische geschieht. Mathematisch handelt es sich um eine Drehung und Streckung der einzelnen Bildpunkte.

Koordinatentransofmation bei der Erstellung eines persepkivischen Bildes

Trransformation bei Perspektive

Dabei werden die Bildpunkte B = (x_b,y_B) durch eine Koordinatentransformation der Ursprungspunkte P = (x_p,y_p) gefunden:

x_b =\frac{s_x \cdot x_p + r_y \cdot y_p + t_x }{p_x \cdot x_p + p_y \cdot y_p + 1 }

y_b =\frac{r_x \cdot x_p + sy \cdot y_p + t_y}{p_x \cdot x_p + p_y \cdot y_p + 1 }

Die 8 Koeffizienten (s_x,s_y,t_x,t_y,p_x,p_y,r_x,r_y) werden durch 8 Punkte festgelegt.

Imagemagick und Befehlssyntax

 

Imagemagick verändert Bilder mit dem Befehl convert. Will man eine Perspektive erzeugen, wird auf der Befehlszeile der Zusatzparameter –distort Perspektive verwendet. Distort beinhaltet eine ganze Klasse von Transformationen, von denen eben eine die Perspektive ist. Wie oben skiziert, brauch man zur Festlegung der Transformation 8 Bildpunkte zur Ermittlung der Transformationskoeffizienten. Diese werden in Anführungszeichen gesetzt und die Transformationskoeffizienten von Imagemagick berechnet:

'x_{p1},y_{p1} x_{b1},y_{b1}   x_{p2},y_{p2} x_{b2},y_{b2}    x_{p3},y_{p3} x_{b3},y_{b3}   x_{p4},y_{p4} x_{b4},y_{b4}'

Zu beachten dabei ist, dass Ursprungspunkt und Zielpunkt durch ein Leerzeichen voneinander getrennt sind und die Punktpaare durch drei.

Virtuelle Pixel

 

Durch die oben beschriebene Operation entsteht ein Bildbereich aus dem Ursprungsbild, in dem die Bildpixel nun undefiniert sind.  Es ist also nötig, Imagemagick zu sagen, was mit diesem Bereich geschehen soll. Da wir gerne hätten, dass das Bild sich dem Hintergrund anpasst müssen wir zunächst als Ausgabeformat der Bilddatei eine Bilddefinition wählen, die auch über einen \alpha-Kanal verfügt. Also wähle ich als Zielformat png. Zudem möchte ich den ausgeschnittenen Bereich transparent haben, damit sich das Bild dem Dokumentenhintergrund anpasst, wenn es in ein Dokument geladen wird. Das geschieht mit dem Schalter -virtual-Pixel transparent.

Um Imagemagick innerhalb von WordPress in php auszuüführen benötige ich also einen Befehl derart:

schell_exec( convert Ursprungsdatei -virtual-Pixel -distort Persective 'P1 B1   P2 B2   P3 B3   P4 B4' Zieldatei.png);

Anpassung des Skriptes Perspektive

 

Im Skript Datenverarbeitung mit Formidable Pro und Imagemagick zur Bildbearbeitung in WordPress erhalten wir eine Bilddatei mit Formidable Pro. Dabei verwenden wir für die Perspektive ein definiertes Zielbild. Um sicherzustellen, dass das neue Zielbild, innerhalb der Größe des Ursprungsbildes liegt, lesen wir zunächst die Größe des Ursprungsbildes aus und berechnen aus der vorgegebenen Maske die neuen Bildpunkte \left{\vec{B_1},\vec{B_2},\vec{B_3},\vec{B_4}}. Ursprungsbildpunkte und Zielbildpunkte legen wir in der Variablen $stretch fest.

Es ergibt sich der Gesamtcode zu:

//Anmeldung des Formidable Hooks mit der Funktion wd_man_im bei wordpress
add_action('frm_after_create_entry', 'wd_man_im', 10, 2);
function wd_man_im($form_id,$entry_id){
     // Formularnummer und Key des Eintrages ermitteln
     $form_id=$_POST['form_id'];
     $Id_Data = $_POST['item_key'];
     //Wenn Formular xx (hier 27) abgesendet wurde, dann führe folgende Operationen aus.
  if ($form_id = 27){
     //Ersetze Mein Wordpress Home Verzeichnis durch das Verzeichnis der Wordpress Installation
     $parse_uri = explode( 'Mein Wordpress Home Verzeichnis', $_SERVER['SCRIPT_FILENAME'] );
     $Pfad= $parse_uri[0]."/Mein Wordpress Home Verzeichnis/Uplod Verzeichnis Formular/";
     // Verwende die globalen Funktionen von Wordpress
     global $wpdb;
     //Ermittlung des Bildnamens
     $current_value = $_POST['item_meta'][216];
     $Dat_url= wp_get_attachment_url($current_value);
     $KompDatei=$Pfad.basename($Dat_url);
     //Definition der Zieldatei mit zu Hilfename des Keys
     $NewImage = $parse_uri[0]."/Mein Wordpress Home Verzeichnis/Datei Zielverzeichnis/".$_POST['item_key']."_converted.png";
  //Auswahl der Option Perspektive
  if ($_POST['item_meta'][219] == "Perspektive"){
  //Ermittlung der Bildgröße
   $size = getimagesize( $KompDatei);
  //Berechnung der Zielbildpunkte aus der Maske
   $hoehe_neu_y_max = round(0.875*$size[1]);
   $hoehe_neu_y_min = round(0.125*$size[1]);
   //Ursprungsbildpunkte und berechnete Zielpunkte
   $stretch = '"0,0 0,0   '.$size[0].',0 '.$size[0].','.$hoehe_neu_y_min.'   '.$size[0].','.$size[1].' '.$size[0].','.$hoehe_neu_y_max.'   0,'.$size[1].' 0,'.$size[1].' "';
   //Zusammenbau des Imagemagick Befehls mit der Option virtuelle Punkte transparent darzustellen.
   $cmd = 'convert '.$KompDatei.'  -virtual-pixel transparent -distort Perspective '.$stretch.' '.$Newimage;
   //Ausführung des Shell Skripts
   shell_exec($cmd);
}

Die Anwendung dieses Tools finden Sie auf bewerbungstools.de/

Bewerbungsfoto: Peppen Sie Ihr Bild auf

Walter Dietz on Email
Walter Dietz
Jobcoach und Diplom Physiker at Rund um den Beruf e.V.
ich arbeite als Jobcoach seit 2004 und habe für Bewerber unzählige Bewerbungsunterlagen erstellt. Seit dieser Zeit hat sich unglaublich viel verändert. Zunehmend sind vor allen Dingen ältere Bewerber vom modernen EDV-orientierten Bewerbungsmanagement überfordert. Eines ist jedoch für alle Bewerberschichten gleich geblieben: Eine aussagekräftige und gut strukturierte Bewerbung erhöht die Chancen auf einen erfolgreichen Job ungemein. Ein Problem zeigt sich bei fast allen Bewerbern, egal welcher Ausbildungsschicht: Die falsche Strukturierung der Bewerbung und Organisation der Unterlagen. Diese Seite will ein wenig helfen, sich besser zu organisieren und helfen, sich das Bewerben leichter zu machen.

Schreibe einen Kommentar

Zur Werkzeugleiste springen