Imagemagick und PHP

Jan-Frederik Stieler

Monsterator
Moderator
Hallo,
ich würde gerne Imagemagick zur Bildbearbeitung in PHP verwenden.
Da ich hier lokal das PHP-Modul nicht zum laufen bekomme, XAMPP :).
Würde ich das gerne direkt verwenden. Nur wie muss ich den Code von Imagemagick in PHP einbinen das Imagemagick zur Ausführung verwendet wird?
Und wenn ich das jetzt lokal ohne PHP-Modul verwende wie ist das auf einem Webserver auf dem das PHP-Modul installiert ist, funktioniert dann Imagemagick auch ohne Modulverwendung?

Viele Grüße
 
Hallo,
ich würde gerne Imagemagick zur Bildbearbeitung in PHP verwenden.
Da ich hier lokal das PHP-Modul nicht zum laufen bekomme, XAMPP :).

Welche Version von XAMPP?

Nur wie muss ich den Code von Imagemagick in PHP einbinen das Imagemagick zur Ausführung verwendet wird?

Kommt darauf an, was genau du machen willst. Wenn es um Bild-Vergrößerung, und dergleichen geht, wirst du das über exec("convert.....") machen können.

Und wenn ich das jetzt lokal ohne PHP-Modul verwende wie ist das auf einem Webserver auf dem das PHP-Modul installiert ist, funktioniert dann Imagemagick auch ohne Modulverwendung?

Kann man nicht mit Sicherheit sagen, kommt darauf an, ob die Commands auf dem Webserver verfügbar sind. Kannst du prüfen, in dem du einfach exec("convert") als PHP-Script ausführst. Wenn ja, dann kannst es verwenden, wenn nicht, dann sind wahrscheinlich nur die Laufzeit-Bibliotheken ohne die Kommandos installiert.
 
Hi,
auf diese Klasse bin ich bisher noch nicht gestossen.
Aber da es heir keine Objekt für perspective gibt, wird das ja meine Arbeit nicht wirklich vereinfachen. Oder habe ich da was übersehen?
Einzigst einfacher ist die Einbindung von Imagemagick bzw. ich kann in der Klasse nachschauen wie er es gemacht hat :).

Grüße
 
Ja, ich gebe zu, die Klasse ist nicht annähernd vollständig. Aber vielleicht konnte ImageMagick seinerzeit (anno 2007) auch noch nicht alles, was es heute kann ;-)

Nehmen wir mal diese Beispiel-Funktion:

PHP:
  /**
    * Crops the image to given size
    * @param $f_iWidth new maximal width of the image
    * @param $f_iHeight new maximal height of the image
    * @param $f_sHow crop method:    'center' > crops the image leaving the center
    *                  'left' > crops only from the top left side
    *                  'right' > crops only from the top right side
    */
   function actionCrop($f_iWidth, $f_iHeight, $f_sHow='center') {
     if (!$this->error) {
       $this->arrImageRawData = $this->loadImageData();
       $this->parseImageData();
         
       if($f_iWidth > $this->arrImageData['width']) {
         $f_iWidth = $this->arrImageData['width'];
       }
         
       if($f_iHeight > $this->arrImageData['height']) {
         $f_iHeight = $this->arrImageData['height'];
       }
         
       /*
        echo "  Args: size_x = {$f_iWidth}\n";
        echo "  Args: size_y = {$f_iHeight}\n";
        echo "  Crop method: {$f_sHow}\n";
        echo "  GetSize: size_x = {$this->arrImageData['width']}\n";
        echo "  GetSize: size_y = {$this->arrImageData['height']}\n";
        */
         
       if($f_sHow == 'center') {
         $line = $f_iWidth.'x'.$f_iHeight.'+'.round( ($this->arrImageData['width'] - $f_iWidth) / 2 ).'+'.round((($this->arrImageData['height'] - $f_iHeight) / 2));
       }
         
       if($f_sHow == 'left') {
         $line = $f_iWidth.'x'.$f_iHeight.'+0+0';
       }
         
       if($f_sHow == 'right') {
         $line = $f_iWidth.'x'.$f_iHeight.'+'.($this->arrImageData['width'] - $f_iWidth).'+0';
       }
         
       $command = "{$this->imageMagickDir}convert -crop '{$line}' '{$this->currentFile}' '{$this->tempDir}tmp".(++$this->count)."_{$this->tempFile}'";
       exec($command, $returnarray, $returnvalue);
         
       if($returnvalue) {
         $this->error = true;
         $this->errorMessages[] = "actionCrop(): Crop failed\n";
       } else {
         $this->currentFile = $this->tempDir.'tmp'.$this->count.'_'.$this->tempFile;
         $this->arrFileHistory[] = $this->currentFile;
         $this->writeLog("actionCrop: ".$f_iWidth."x".$f_iHeight." ".$f_sHow);
       }
     }
   }

Wie ich schon schrieb, wird das Command mit exec() aufgerufen und alle Parameter angehängt. So in etwa wäre ich auch vorgegangen. Du kannst die Klasse ja erweitern, ist ja unter einer freien Lizenz veröffentlicht worden. Dann hättest du eine Basis, welche sogar Logging unterstützt.
 
Zurück