Bilder automatisch auf dem Webserver erzeugen nur mit Imagemagick und PHP Part 2

24. Januar 2016 - Foto

Link zu Teil 1

Link zu Teil 3

Die Beispiele für den Einsatz von ImageMagick im Internet sind fast alle für die UNIX Bash-Shell geschrieben.
Bash wird man bei seiner Feld-Wald-und-Wiesen Domain kaum vorfinden. Deshalb müssen wir die Beispiele etwas abändern.
Das folgende Bash Script stammt von Anthony Thyssens Seite http://www.imagemagick.org/Usage/mapping/#spherical und erzeugt ein Schwarz-Weiß Bild (weißer Kreis in einem schwarzen Quadrat), das wir später für unser Beispiel nutzen werden.

convert -size 100x100 xc:black -fill white \
-draw 'circle 49.5,49.5 49.5,0'    sphere_mask.png

wird zu

$base_dir=__DIR__;
$absoluter_Pfad_mit_DIRECTORY_SEPARATOR=$base_dir.DIRECTORY_SEPARATOR;
$mask=$absoluter_Pfad_mit_DIRECTORY_SEPARATOR."sphere_mask.png";
$cmdP2= " convert -size 400x400 xc:black -fill white ".
" -draw \"circle 199.5,199.5 199.5,0\" $mask ";

Ich habe hier den freistehenden Backslash (zeigt Bash an, dass die nächste Zeile auch noch zum Script gehört) entfernt und die Hochkommas durch \“ ersetzt. Außerdem sollten alle Dateien einen absoluten Pfadnamen erhalten.
Als letztes habe ich noch die Dateigröße auf 400×400 Pixel vergrößert und den zu zeichnenden Kreis entsprechend angepasst.

Mein kleines PHP Programm sieht nun so aus:

<?php
$base_dir=__DIR__;
$absoluter_Pfad_mit_DIRECTORY_SEPARATOR=$base_dir.DIRECTORY_SEPARATOR;
$mask=$absoluter_Pfad_mit_DIRECTORY_SEPARATOR."sphere_mask.png";
$cmdP2= "convert -size 400x400 xc:black -fill white ".
"-draw \"circle 199.5,199.5 199.5,0\" $mask ";
unset($out);
exec($cmdP2,$out,$err);
echo "<br />out ".print_r($out)."<br />";
echo "err= $err";
?>

Da wir hier das Ergebnis in die Datei sphere_mask.png speichern und nicht wie im ersten Beispiel an den Browser schicken, können wir exec() anstelle von system() verwenden. Der Unterschied wird hier erklärt.