When the solution matters

Registrieren Einstieg Dokumentation Code Archiv Mail-Archiv Support Programme

Imagemagick

 

Inhaltsverzeichnis

Imagemagick = Bildbearbeitung über das Terminal

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.

Bild:ImageMagic.jpg

Introduction to ImageMagick

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.

Beispiel - Aufruftechnik

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"

Aufruf unter Windows

$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.

Aufruf unter Mac OS X

$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.


Cross Plattform Aufruf

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

Mac Pfad Konvertierung

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

Weitere Informationen und Download

 

Meine Anregung zu dieser Seite:

Bemerkungen, Vorschläge, Fehler
Name
eMail

 

International | Firmenprofil | Kontakt | Site Map | © 4D 1995 - 2007 | Schriftgröße ändern: [A] [A] [A] | Diese Seite drucken - * Externer Link