In php ein compare Befehlt ausführen

Ich hoffe ich bin hier richtig und es kann mir jemand helfen, den ich habe selber schon lange und viel in Google und anderen Foren gesucht, aber ich habe keine Lösung gefunden.

Wie kann man in einem PHP Programm einen compare Befehlt ausführen, welcher 2 Bilder miteinander vergleicht und zum einen eine Datei erstellt, welche zeigt wo die Bilder unterschiedlich sind, und mir zurück gibt wie viele Pixel sich unterscheiden.

Mit folgendem befehlt habe ich es versucht:
$command = „compare -metric AE Datei1.png Datei2.png Unterschied.png“;
$last_line = system($command, $output);
echo $output;
echo $last_line;

und zurück bekomme ich dann nur den Wert „1“
und auch keine Datei, obwohl die Bilder sehr unterschiedlich sind:

Ich programiere auf einem Linux Rechner(opennSUSE), mit NetBeans IDE 7.0.1.

Sorry, da muss ich passen - hab ich noch nicht gemacht.
Gruß O. Hansen

Wie kann man in einem PHP Programm einen compare Befehlt
ausführen, welcher 2 Bilder miteinander vergleicht und zum
einen eine Datei erstellt, welche zeigt wo die Bilder
unterschiedlich sind, und mir zurück gibt wie viele Pixel sich
unterscheiden.

Hallo,

eigentlich sieht der Befehl gar nicht so falsch aus.
Du solltest dich vergewissern, dass der Befehl außerhalb von PHP so funktioniert.
D.h. in der Konsole den Aufruf
compare -metric AE Datei1.png Datei2.png Unterschied.png

Wenn dabei das richtige Ergebnis rauskommt, könnte es sein, dass PHP nicht die erforderlichen Rechte hat um den Befehl korrekt auszuführen.

Eigentlich ist auch die Reihenfolge des Befehls anders vorgesehen:
compare Datei1.png Datei2.png -metric AE Unterschied.png
Aber das ist nicht Grund für das Problem denke ich.

Gruß

Puh…da bin ich leider überfordert, Bilder habe ich noch nie verglichen.
Klingt aber interessant, da muß ich mich mal mit beschäftigen :wink:
Gruß, Regina

Wenn dabei das richtige Ergebnis rauskommt, könnte es sein,
dass PHP nicht die erforderlichen Rechte hat um den Befehl
korrekt auszuführen.

Danke für die Schnelle Antwort.
Der Befehlt funktioniert auf der Konsole direkt perfekt.
Aber über PHP eben noch nicht.
Was für rechte könnten da in frage kommen, bzw. wo schau ich da nach den evtl. fehlenden Rechte also bei welchen Dateien oder Programmen?

Den andere Befehle wie „ls -l“ also alle welche nur einen Rückgabewert liefern müssen und keine Datei erstellen oder ähnliches klappen auch von PHP aus.

Dann könnte es vielleicht auch an Pfaden liegen.
Zuerst am besten einmal probieren immer vollständige Pfade anzugeben.
Z.B.
system(’/usr/bin/compare /pfad/zu/Datei1.png /pfad/zu/Datei2.png -metric AE /pfad/zu/Unterschied.png’, $output)

Vielleicht hat das PHP Probleme damit die Dateien zu finden.

Hallo,

ich hätte zwei Ideen:

  • komplette Pfade angeben. Also „/usr/bin/compare -metric AE /wo/auch/immer/Datei1.png /wo/auch/immer/Datei2.png /wo/auch/immer/Unterschied.png“.
  • Rechte prüfen. php bzw. der Webserver läuft in der Regel mit eigenen, recht eingeschränkten Rechten. Wenn es in der Konsole als normaler Benutzer klappt (mittels Eingabe von „php deinedatei.php“) liegt es bestimmt an den Rechten.

Alternativ: Den compare-Befehl gibt es auch direkt in PHP, wenn die entsprechende Erweiterung installiert ist (PECL). Siehe http://www.php.net/manual/en/imagick.compareimages.php In $result[1] sollte sich dann die gesuchte Zahl finden.

Mit freundlichen Grüßen,

Lars