Kategorie: Foto

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

25. Januar 2016 - Foto

Link zu Teil 1 Link zu Teil 2 Jetzt wollen wir uns mal an die Vespa machen, die übrigens in Gallipoli/Apulien in der Altstadt herumstand. Wir müssen dazu drei Dateien vorbereiten. Die erste haben wir schon im Teil 2 erzeugt und sieht so ähnlich  (verkleinert) aus: sphere_mask
 
Die zweite erzeugen wir mit
 convert -size 100x100 xc:  -channel R \
 -fx 'yy=(j+.5)/h-.5; (i/w-.5)/(sqrt(1-4*yy^2))+.5' \
 -separate  +channel     sphere_lut.png
Daraus wird unter PHP
<?php
$lut=$absoluter_Pfad_mit_DIRECTORY_SEPARATOR."sphere_lut.png";
$cmdP1= "convert -size 400x400 xc:  -channel R ".
"-fx \"yy=(j+.5)/h-.5; (i/w-.5)/(sqrt(1-4*yy^2))+.5\" ".
"-separate  +channel    $lut ";
?>
Das sieht etwas verwirrend aus. ImageMagick hat außer den eingebauten Funtionen wie z.B. -size oder -separate auch noch die Möglichkeit, die Transformation Pixel für Pixel selbst zu machen mit dem -fx special effects image operator. Was da genau passiert, kann man mit wenigen Worten hier nicht erklären, aber es ist hier gut dokumentiert Am besten, man macht das so wie gewöhnlich: man findet einen Effekt, probiert ihn aus und wenn man etwas ändern möchte, muß man sich einlesen. Rein technisch ist sphere_lut.php eine lookup table, die bei der Erzeugung des eigentlichen Bildes Pixel für Pixel ausgelesen wird. Dabei werden die Grauwerte jedes Pixels (skaliert von 0.0 bis 1.0) dazu verwendet, um die Bildtranformation zu steuern. Im vorliegenden Fall wird ein quadratisches Bild auf einen Kreis abgebildet sphere_lut.png sieht so aus: sphere_lut Im Prinzip ist es ein Kreis, der einen horizontalen Gradienten von schwarz nach weiß besitzt. Die weißen und schwarzen Ecken kann man sich wegdenken, weil sie später ausgeblendet werden.   Die dritte Datei wird aus der ersten Datei abgeleitet. Sie soll unserer Vespa einen 3D- Effekt geben.
convert sphere_mask.png \
 \( +clone -blur 0x20 -shade 110x21.7 -contrast-stretch 0% \
 +sigmoidal-contrast 6x50% -fill grey50 -colorize 10%  \) \
 -composite sphere_overlay.png
Daraus wird unter PHP
<?php
$overlay=$absoluter_Pfad_mit_DIRECTORY_SEPARATOR.'sphere_overlay.png';
$cmdP3= "convert $mask ( +clone -blur 0x20 -shade 110x21.7 -contrast-stretch 0% ".
" +sigmoidal-contrast 6x50% -fill grey50 -colorize 10% ) ".
" -composite $overlay ";
?>
Achtung: die escapten Klammern \( und \) werden einfach zu ( und ) !!! Hier wird unser weißer Kreis unscharf gemacht (-blur...), aus einer Richtung und einer Höhe belichtet (-shade ...) und dann das Ergebnis verbessert. Bei Gimp heißt dieser Effekt Bumpmap. Das Ergebnis sollte so aussehen: sphere_overlay Jetzt können wir die Vespa erzeugen:
convert vespa_orig.png -resize 100x100   sphere_lut.png   -fx 'p{ v*w, j }' \
sphere_overlay.png   -compose HardLight  -composite \
sphere_mask.png -alpha off -compose CopyOpacity -composite \
sphere_vespa.png
<?php
$input=$absoluter_Pfad_mit_DIRECTORY_SEPARATOR.'vespa.jpg';
$out=$absoluter_Pfad_mit_DIRECTORY_SEPARATOR.'vespa_button.jpg';
$cmd=" convert $input -resize 400x400 ".
" $lut    -fx \"p{ v*w, j }\"   ".
" $overlay -compose HardLight  -composite ".
" $mask -alpha off -compose CopyOpacity ".
" -composite $out ";
?>
Hier ist das Originalbild (verkleinert) vespa200x200 Und hier unser Button vespa_200x200             Viel Spaß beim Bildermachen.

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 400x400 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.

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

24. Januar 2016 - Foto

Link zum Teil 2 Link zum Teil 3 In diesem Beitrag wird gezeigt, wie man ohne die PHP Library Imagick komplexe automatische Bilder auf dem Webserver erzeugen kann. Dazu gibt es folgende Kapitel: - einfacher Test, mit dem man erkennen kann, ob Imagemagick auf seinem Webserver installiert ist und zusammen mit PHP funktioniert - Wie findet man Imagemagick Beispiele und wie muß man sie verändern, damit sie unter PHP laufen - eine komplexe Beispielanwendung: quadratische Bilder werden zu runden Badges mit 3D-Effekt English summary: This post is intended for those who want to let their webserver create complex images with just Imagemagick and PHP. It covers the topics: - how you can easily find out that Imagemagick is installed on your webserver und cooperates with PHP - modify existing examples from the internet so that they will run in PHP exec - and we will build an example that converts rectangular images into circular "badges" with 3D effects. Kann ich Imagemagick auf meinem Webserver nutzen? Hierzu ein einfaches Testprogramm:
<?php
$cmd= "convert rose:    GIF:-";
header("Content-type: image/gif");
system($cmd,$array);
?>
Man speichert dieses Programm als index.php und lädt es in ein Unterverzeichnis seiner Domain http://meinedomain.de, z.B. als "im_test". Dann ruft man das Programm auf : http://meinedomain.de/im_test und sollte anschließend in seinem Browser dieses kleine Bild sehen: rose "rose" ist ein eingebautes Testbildchen von Imagemagick. "convert rose:    GIF:-" ruft Imagemagicks  convert Funktion auf, die es nach gif konvertiert und zum Browser schickt. Sieht man das Bild nicht, sollte man sich mit seinem Provider unterhalten... Getestet habe ich das Beispiel bei strato und 1und1.

Panoramabilder mit MS Image Composite Editor: schnell und gut

9. August 2013 - Foto

Mal schnell ein gutes Panoramabild machen: das wünscht sich jeder Fotograf, der schon Stunden damit verbracht hat, die eigenen Bilder zusammen zu puzzeln. Auf den Tipp eines Freundes hin habe ich mal den Microsoft Image Composite Editor (1.4.4, 64 Bit) ausprobiert. Und war überrascht. Die Vorlagen waren diese acht Bilder (jedes ca. 6MB) direkt aus der Kamera: Das Urlauberschiff hat in Balos/ Kreta angelegt und die Touristen verteilen sich über die Bucht.
 
   
   
   
Beim MS- ICE legt man die Dateien einfach in den Projektordner hinein. Das Zusammenfügen der Bilder dauerte ca. 30 Sekunden auf einem Intel Core 2 DUO Rechner mit 2.2 GHz. Exportiert als PNG sah das Panoramabild dann etwa so aus (Ausschnitt) Natürlich passten die Fotos nicht genau zusammen. Im PNG-Format werden die leeren Stellen aber nicht abgedeckt, sondern bleiben schlicht transparent. Das erleichtert das Clonen des Himmels z.B. mit Gimp auf den Transparenzen (den Bereich an der unteren Bildseite habe ich abgeschnitten). Das Panorama hat ca. 64MB als PNG-Datei. Hier ist ein auf ca. 6MB reduziertes JPG und, naja, mit ein Bißchen Weißabgleich und etwas nachschärfen...

Fotografie mit „available light“

18. Januar 2013 - Foto

Ohne wissenschaftlichen Anspruch möchte ich hier ein paar Bilder gegenüberstellen, die die Auswirkungen von Bildsensorgröße und Objektiv bei schlechten Lichtverhältnissen verdeutlichen sollen. Mein Referenzbild ist mit einer Nikon D600 Vollformatkamera 24x36  mit 24,4 MPixel und einem Ojektiv mit hochwertigen Linsen (Tamron 24-70 1:2,8 Di) aufgenommen worden Die hier gezeigten Bilder sind Ausschnitte (2-3%) aus den Originalen und unbearbeitet. Bei den Kameras wurde die höchste JPEG Qualitätsstufe benutzt. Die ISO Werte der Bilder lagen alle über 3600.
D600 FX Modus (24x36) Tamron 24-70 1:2,8 Di
D600 DX Modus (16x24) Tamron 24-70 1:2,8 Di
Im ersten Vergleich ändert sich nur die Sensorgröße. Durch die geringere Auflösung gehen einige Details verloren
D600 FX Modus (24x36) Tamron 24-70 1:2,8 Di
D600 DX Modus (16x24) Sigma 18-50 1:2,8 DC
In diesem Fall wird ein DX Objektiv mit weniger hochwertigen Linsen eingesetzt. Weiterer Verlust von Details plus Farbveränderungen in den helleren Flächen
D600 FX Modus (24x36) Tamron 24-70 1:2,8 Di
D90 (DX Kamera) Tamron 24-70 1:2,8 Di
Hier wird die Kamera getauscht. Die Kombination von einer DX Kamera mit dem hochwertigen FX Objektiv erzeugt die schlechtesten Bilder dieser Serie
D600 FX Modus (24x36) Tamron 24-70 1:2,8 Di
D90 (DX Kamera) Sigma 18-50 1:2,8 DC
Die DX Kamera kommt mit diesem DX Objektiv besser zurecht: weniger Farbveränderungen und geringerer Detailverlust als beim vorhergehenden Beispiel.