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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*
*