ImageMagick - Pfad zur Ausgabedatei

guenter024

Erfahrenes Mitglied
Hi PHP-Freunde,

ich stehe vor folgender Aufgabe:
Mit SVG werden aus Nutzereingaben Kurvendiagramme erstellt.
Auf Grund mangelhafter Browserkompatibilität möchte ich die SVG-Datei in ein jpg oder png konvertieren und das Bild ausgeben (Bild soll also nicht gespeichert werden).

Die SVG-Grafik liegt also schon vor, zum konvertieren will ich ImageMagick nutzen.
Die Versionsabfrage ImageMagick ergibt:
ImageMagick Version:

Version: ImageMagick 6.6.0-4 2012-04-26 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2010 ImageMagick Studio LLC
Features: OpenMP
ImageMagick liegt also vor.
Versuche zunächst einfach ein JPG in ein PNG umzuwandeln.
Zum Konvertieren habe ich folgendes Kommando verwendet:
PHP:
error_reporting(E_ALL);

$imgpath="/homepages/XX/XXXXXXXX/pfad/zur/datei";
$convert="usr/bin/convert";

$file="bilddatei";

if(file_exists($imgpath."/".$file.".jpg"))
{
    exec("$convert $file.jpg $file.png");
}

print "<img src=\"$file.png\" />";

Leider wird kein PNG-Bild generiert und folglich auch keins angezeigt.
Das Original liegt aber laut Bildinformationen vor:
PHP:
echo "
<pre>";
system("identify -verbose $file.jpg");
echo "</pre>";

Woran kann das liegen?
Hoffe jemand kann mir helfen.

Gruß
Günter
 
Ich habe noch nie mit ImageMagick gearbeitet, aber:
Du prüfst auf Pfad+Datei. Im exec() gibst du aber nur die Datei ohne Pfad an. Weiss der convert wo die Dateien liegen?
 
Ja, die Dateien liegen im identischen Verzeichnis wie das ausführende Skript.

ps: laut Doku ist das so ok.
Bei der Abfrage der Bildinformationen werden die Daten des Testbildes auch korrekt ausgegeben.
Davon abgesehen, hab ich schon alle möglichen Pfade probiert.

Habe auch schon an den Schreibrechten des Verzeichnisses herumprobiert.
Ich weis absolut nicht weiter.


Korrigiere noch nach:
es muss natürlich
PHP:
$convert="/usr/bin/convert";
heissen.
Dies ist aber keine Lösung auf mein Problem, im Skript ist es schon richtig.
 
Zuletzt bearbeitet:
Tja, da kann man lange suchen.

Der Code ist absolut korrekt.

Es liegt am Server. :(
Wenn ich dem Provider nur meine Zeit in Rechnung stellen könnte.
 
Lass mich raten. ImageMagick schpricht ein Verzeichnis an, wo du keine Rechte hast.

Wieso machst du es nicht mit der IMagick PHP-Extension?

PHP:
   $SVG_DG = new Imagick();
   $SVG_DG->readImage('/www/htdocs/sdfsdfsd/diagramme/'.$diagramm.'.svg');
   $SVG_DG->SetImageFormat("PNG32");
   $SVG_DG->writeImage('/www/htdocs/sdfsdfsd/diagramme/'.$diagramm.'.png');
   $SVG_DG->clear();
   $SVG_DG->destroy();

Nur ein Beispiel!
 
Mit IMagick wäre es sicher einfacher gewesen - wenn ich die Extension zur Verfügung hätte.
Laut phpinfo() ist das aber nicht der Fall, also bohre ich da gar nicht erst weiter.
Habe es aber zum Laufen bekommen:

Ich habe den command mit
PHP:
$cmd='convert "input.svg" "output.png" 2>&1';
exec($cmd);
ausgeführt und dabei die Fehlermeldung
libgomp: Thread creation failed: Resource temporarily unavailable
bekommen. Hier war dann
PHP:
putenv("MAGICK_THREAD_LIMIT=1");
die Lösung. Nun funktioniert es hervorragend.
 
Zurück