Inhaltsverzeichnis |
Mit dem Befehl Lauch External Process (ab 4D 2004) ist es möglich Imagemagick zu steuern und so viele weitere Möglichekiten der Bildverarbeitung in 4D zu nutzen.
ImageMagickTM, version 6.2.2, is a free software suite to create, edit, and compose bitmap images. It can read, convert and write images in a large variety of formats. Images can be cropped, colors can be changed, various effects can be applied, images can be rotated and combined, and text, lines, polygons, ellipses and Bezier curves can be added to images and stretched and rotated.
ImageMagick is free software: it is delivered with full source code and can be freely used, copied, modified and distributed. Its license is compatible with the GPL. It runs on all major operating systems.
Most of the functionality of ImageMagick can be used interactively from the command line; more often, however, the features are used from programs written in the programming languages Perl, C, C , Python, PHP, Ruby, Tcl/Tk or Java, for which ready-made ImageMagick interfaces (PerlMagick, Magick , PythonMagick, MagickWand for PHP, RMagick, TclMagick, and JMagick) are available. This makes it possible to modify or create images automatically and dynamically.
ImageMagick supports many image formats (over 90 major formats) including popular formats like TIFF, JPEG, PNG, PDF, PhotoCD, and GIF.
Der ImageMagick Befehl "convert" konvertiert Bilder zwischen verschiedenen Formaten, skaliert oder beschneidet, erstellt Thumbnails, erlaubt das Erzeugen von Text oder Linien und vieles mehr.
convert -sample 25%x25% -raise 8x8 bild.jpg neu.gif
Diese Anweisung verkleinert das Jpeg-Bild auf 25%, erstellt einen erhabenen Rahmen mit 8 Pixel Breite und konvertiert dieses zu GIF.
convert -rotate 10 bild.jpg neu.jpg
rotiert Bild.jpg um 10° und speichert das Ergebnis als neu.jpg
convert -font helvetica -fill white -pointsize 48 -draw
"text 10,50 '4D 2004'" bild.jpg neu.jpg
schreibt den Text "4D 2004" in Helvetica 48 weiß an Position 10/50 in das Bild "bild.jpg" und schreibt das Ergebnis in "neu.jpg"
$cmd:="convert -sample 25%x25% -raise 8x8 "
$cmd:=$cmd+char(34)+"C:\\bild.jpg"+char(34)+" "
$cmd:=$cmd+char(34)+"C:\\neu.gif"+char(34)+char(13)+char(10)
$out:=""
$err:=""
LAUNCH EXTERNAL PROCESS("cmd.exe";$cmd;$out;$err)
Die Einbettung der Pfadnamen in Anführungszeichen ist notwendig wenn der Pfad Leerzeichen enthält, was oft (z. B. bei "Eigene Dateien" vorkommt). Beachten Sie das abschließende CRLF (13+10), das ist zwingend erforderlich.
$cmd:="/sw/bin/convert -sample 25%x25% -raise 8x8 " $cmd:=$cmd+char(34)+"/bild.jpg"+char(34)+" $cmd:=$cmd+char(34)+"/neu.gif""+char(34) $out:="" $in:="" $err:="" LAUNCH EXTERNAL PROCESS($cmd;$in;$out;$err)
Auch unter Mac OS sind Anführungszeichen sinnvoll. Erschwerend kommt hinzu das der vollständige Pfad zu convert angegeben werden muß. Je nach Distribution oder Compilierungsart sind unterschiedliche Pfade denkbar, gewöhnlich /sw/bin/ oder /usr/local/bin/. Der Pfad zum Quell- und Zielbild muß als Posix/Unix Pfad angegeben werden, Umlaute müssen in UTF-8 konvertiert werden.
Das läßt sich mit etwas Code aber automatisieren, der Aufruf kann auch plattformübergreifend identisch erfolgen.
C_TEXT($cmd;$in;$out;$err;$para)
$cmd:="convert -sample 25%x25% -raise 8x8 "
C_LONGINT($vlPlatform;$vlSystem;$vlMachine)
PLATFORM PROPERTIES($vlPlatform;$vlSystem;$vlMachine)
If ($vlPlatform=Windows )
$cmd:=$cmd+Char(34)+$sourcepath+Char(34)+" "+Char(34)
+$targetpath+Char(34)+Char(13)+Char(10)
SET ENVIRONMENT VARIABLE("_4D_OPTION_HIDE_CONSOLE";"true")
LAUNCH EXTERNAL PROCESS("cmd.exe";$cmd;$out;$err)
Else
$sourcepath:=Mac path to unix path ($sourcepath)
$targetpathunix:=Mac path to unix path ($targetpath)
$cmd:=IMinstalledprogrampath+$cmd+Char(34)+$sourcepath+Char(34)
+" "+Char(34)+$targetpathunix+Char(34)
LAUNCH EXTERNAL PROCESS($cmd;$para;$out;$err)
End if
Die Variable IMinstalledprogrampath wird beim Programmstart in On Startup erzeugt. Dazu wird geprüft wo bzw. ob überhaupt ImageMagick instaliert ist:
PLATFORM PROPERTIES($vlPlatform;$vlSystem;$vlMachine)
$cmd:="convert -version"
$find:="Version: ImageMagick"
If ($vlPlatform=Windows )
IMinstalledprogrampath:=""
` ImageMagick Win installer will set PATH environment variable
$cmd:=IMinstalledprogrampath+$cmd+Char(13)+Char(10)
SET ENVIRONMENT VARIABLE("_4D_OPTION_HIDE_CONSOLE";"true")
LAUNCH EXTERNAL PROCESS("cmd.exe";$cmd;$out;$err)
$pos:=Position($find;$out)
If ($pos<1)
ALERT("ImageMagick not available. Please reinstall it. ")
End if
Else
IMinstalledprogrampath:="/usr/local/bin/" `path for precompiled binary
$cmd2:=IMinstalledprogrampath+$cmd
LAUNCH EXTERNAL PROCESS($cmd2;$para;$out;$err)
$pos:=Position($find;$out)
If ($pos<1)
IMinstalledprogrampath:="/sw/bin/" ` this is the path for Fink
$cmd2:=IMinstalledprogrampath+$cmd
LAUNCH EXTERNAL PROCESS($cmd2;$para;$out;$err)
$pos:=Position($find;$out)
If ($pos<1)
ALERT("ImageMagick ist nicht instaliert oder in einem falschen Ordner")
End if
End if
End if
Für MacOS X muß der - normal für HFS - vorliegende Pfad konvertiert werden.
` Posix Path := Mac path to unix path(MacOS path)
C_TEXT($1;$0;$pfad;$pfadneu;$errors;$callback)
C_INTEGER($viLen;$viPos;$viChar)
C_STRING(2;$vsDirSymbol)
$vsDirSymbol:=":"
$viLen:=Length($1)
$viPos:=0
For ($viChar;1;$viLen;1)
If ($1[[$viChar]]=$vsDirSymbol)
$viPos:=$viChar
$viChar:=$viLen+1
End if
End for
If ($viPos>0)
$pfad:="/"+Replace string(Substring($1;$viPos+1);$vsDirSymbol;"/")
Else
$pfad:="/"
End if
$callback:="iconv -c -s -f \"macroman\" -t \"UTF-8\""
LAUNCH EXTERNAL PROCESS($callback;$pfad;$pfadneu;$Errors)
$0:=$pfadneu