Mit ImageMagick in PHP Bilder verkleinern

Acipenser

Enthusiast
Thread Starter
Mitglied seit
17.05.2007
Beiträge
973
Ort
Dort, wo der Pfeffer wächst
PHP:
Hi Leute,

ich habe ein Problem mit dem Verkleinern von Bildern auf meinem Webspace.
Zunächst lud ich diese hoch und versuchte dann mit der GDlib das Ganze anzugehen, doch leider ist dafür das Speicherlimit zu gering (64M).
Ich bin Kunde bei Strato und habe das PowerWeb Basic, weswegen ich nichts ans der php.ini ändern könnte.

Deswegen erkundigte ich mich weiter und fand ImageMagick. Dieses sei auch laut der Strato-FAQ installiert.
Nun ist meine Frage, wieso dieses auch bei größeren Datenmengen nicht funktioniert?

Zum Verkleinern nehme ich folgenden Konsolenbefehl:

PHP:
exec('/opt/RZmagick4/bin/convert -sample 50%x50% bilder_upload/Bild-gross.JPG bilder/Bild-klein.JPG');


Vllt könnt ihr mir ja da etwas auf die Sprünge helfen?

Schon mal Danke im Voraus!

Gruß :wink:
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Quelle: PHP: exec - Manual
string exec ( string $befehl [, array $ausgabe [, int $return_var ]] ),

Ist der Parameter array angegeben, wird dieses mit jeder Zeile des Befehlsausgabe gefüllt

Beachten Sie auch, dass wenn Sie ein Programm mit dieser Funktion starten und Sie es im Hintergrund laufen lassen möchten, Sie sicherstellen müssen, dass die Ausgabe des Programms in eine Datei oder anderenen Ausgabestream umgeleitet wird. Andernfalls wird PHP solange laufen, bis das Programm beendet ist.

1) leeres array übergeben, in dem dann die Rückgabe des Programms steht. Mit etwas Glück steht dort dann eine Fehlermeldung drin, mit der du was anfangen kannst ;)

2) Ausgabe nach /dev/null leiten
 
Zuletzt bearbeitet:
kannst es auch mal damit versuchen:
Code:
ini_set("memory_limit","128M");

solltest trotzdem schauen, dass du unter 4mb beim Hochladen bleibst, denn ich glaube wenn du das Bild bearbeitest bzw hochlädst wird ein RAW davon erzeugt, welches höhe*breite*bit/pixel in bit hat also z.b. 6143x3855 Bild mit 3bit pro Pixel braucht 71mb Speicherplatz.

wenn ich Falsch liege, bitte berichtigen! Man lernt nie aus!

Gruß
 
1) leeres array übergeben, in dem dann die Rückgabe des Programms steht. Mit etwas Glück steht dort dann eine Fehlermeldung drin, mit der du was anfangen kannst ;)

2) Ausgabe nach /dev/null leiten

Auf diese Weise dann?
PHP:
<?php
$bild_alt = 'abi-1.JPG';
$bild_neu = 'abi-1-n.JPG';
$neueHoehe = 350;
$array=array();

echo "<pre>";
exec("/opt/RZmagick4/bin/convert -sample $neueHoehe bilder_upload/$bild_alt bilder/$bild_neu", $array);
echo "<br>".print_r($array)."<br>"; 
echo "</pre>";
?>
Gibt mir leider nur folgendes aus:
Code:
Array
(
)

1
Also stimmt wohl etwas noch nicht?

kannst es auch mal damit versuchen:
Code:
ini_set("memory_limit","128M");

solltest trotzdem schauen, dass du unter 4mb beim Hochladen bleibst, denn ich glaube wenn du das Bild bearbeitest bzw hochlädst wird ein RAW davon erzeugt, welches höhe*breite*bit/pixel in bit hat also z.b. 6143x3855 Bild mit 3bit pro Pixel braucht 71mb Speicherplatz.

wenn ich Falsch liege, bitte berichtigen! Man lernt nie aus!

Gruß
Hi, das hab ich schon versucht und leider funktioniert das bei diesem Hoster nicht.
 
Probier es mal mit absoluten Pfaden, d.h. die Pfade zu den Bildern absolut (irgendwas mit /home/xxx/htdocs/pfad/abi-1.JPG, siehe Strato FAQ) übergeben.
Natürlich musst du auch auf groß-kleinschreibung achten, d.h. das Bild muss exakt "abi-1.JPG" heißen ! Wenn der Dateiname "abi-1.jpg" ist dann kann es nicht funktionieren.

PS 1:
Das hast du schon probiert, oder ? http://de1.php.net/manual/de/imagick.resizeimage.php

PS 2:
Mir ist schleierhaft woher die "1" in der Ausgabe nach dem Array kommen soll, denn nach print_r($array) wird nichts mehr ausgegeben (außer halt HTML </pre>). Die Ausgabe passt m.M.n. nicht zu dem Script. Naja egal...
PHP:
echo "<br>".print_r($array)."<br>"; 
echo "</pre>";
?>
Gibt mir leider nur folgendes aus:
Code:
Array
(
)

1
 
Zuletzt bearbeitet:
Hab's jetzt durch relative Pfade ersetzt. Funktioniert genauso gut/schlecht wie vorher. Denn das ist ja der Punkt, manche Bilder gehn mit diesem Befehl, andere nicht.
Auf die exakte Bezeichnung hab ich geachtet.

zu PS1: Ja, bei
PHP:
<?php
new Imagick();
?>
kommt
Fatal error: Cannot instantiate non-existent class: imagick in /mnt/web5/e1/04/51509604/htdocs/fotowettbewerb/php.php on line 2
was ja heißt, dass nur die Konsolenversion verfügbar ist und nicht diese?

zu PS2:
Das mit der 1 ist mir auch ein Rätsel, aber sie kommt definitiv von dieser Codezeile:
PHP:
echo "<br>".print_r($array)."<br>";
 
die "1" wird doch der Error Code sein der zurückgegeben wird. Denke mal da dürfte diese Liste zutreffen: Big Online Book of Linux Ada Programming - Appendix B

Unter user error: ImageMagick reported error code 1 | drupal.org hab ich dazu das hier gefunden:
@HS - I actually got a solution from 1&1 they said:

You are using the "convert" function of ImageMagick. This tool uses too much memory, if not tweaked properly. You have to put this line in PHP code:

putenv("MAGICK_THREAD_LIMIT=1");

I added their line to the settings.php file and it solved my problem.

probier's mal.
 
Hi, danke für den Hinweis, habe die Zeile jetzt in meine PHP-Datei gepackt, wo auch der Befehl drin steht (war ja richtig, oder?), allerdings funktionierts immer noch nicht. Erneut die selbe Ausgabe.

Sollte ich vielleicht mal Strato mailen und mein Problem schildern? Vielleicht können die mir ja helfen oder würden sogar das Speicherlimit hochsetzen?!
 
Hab gerade rausgefunden, dass PHP 4.4.6 auf diesem Verzeichnis arbeitete und dieses nur 64MB unterstützte. Hab's jetzt auf PHP5 umgestellt, welches das Speicherlimit auf 104MB hochsetzt.
Leider geht's trotzdem noch nicht.
Diese "1" kommt übrigens auch, wenn es mit Bildern funktioniert.
Hab dem Stratosupport jetzt mal geschrieben.
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh