Bilder verkleinern
Thomas
- php
0 Vinzenz Mai0 Thomas0 bleicher0 Tom0 Thomas0 Tom0 Thomas0 Vinzenz Mai0 Thomas
0 Vinzenz Mai
0 Thomas0 Tom
0 Vinzenz Mai0
dedlfix
Hallo zusammen,
Ich habe auf meiner Homepage eine Galerie. Damit Die Bilder nicht unnötig Speicherplatz verbrauchen, hab ich ein Script gebaut, dass alle Bilder automatisch verkleinert.
<?php
$ordner1 = "galerie";
$handle1 = opendir($ordner1);
while ($file1 = readdir ($handle1)) {
if($file1 != "." && $file1 != "..") {
$compl1 = $ordner1."/".$file1;
$path = "$compl1/control.control";
if(!file_exists($path))
{
$ordner = "$compl1/";
$handle = opendir($ordner);
while ($file = readdir ($handle)) {
if($file != "." && $file != "..") {
$compl = $ordner."/".$file;
$bild="$compl1/".$file;
$size=getimagesize($bild);
$breite=$size[0];
$hoehe=$size[1];
$neueHoehe=500;
$neueBreite=intval($breite*($neueHoehe/$hoehe));
$altesBild=ImageCreateFromJPEG($bild);
$neuesBild=imagecreatetruecolor($neueBreite,$neueHoehe);
imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);
ImageJPEG($neuesBild,"$compl1/".$file);
}
}
$fp = "$compl1/control.control";
$inhalt = "Diese Datei dient zur Kontrolle ob die Bilder verkleinert wurden";
$f = fopen($fp,"w+");
fwrite($f,$inhalt);
fclose($f);
}
}
}
?>
Leider geschieht beim ausführen einfach nichts.
Als ich das Script auf dem lokalen Server getestet hatte funktionierte alles Prima. Ich denke es liegt an igrendwelchen servereinstellungen. HAt jemand ne Idee wie man das Problem lösen könnte.
Lg
Hallo
Als ich das Script auf dem lokalen Server getestet hatte funktionierte alles Prima. Ich denke es liegt an igrendwelchen servereinstellungen. HAt jemand ne Idee wie man das Problem lösen könnte.
Kommentare einfügen.
error_reporting auf E_ALL setzen.
Debugausgaben einfügen.
Rückgabewerte prüfen.
Ich verstehe nicht, was Du da machst.
Vergiß bitte nicht, dass wir keine Informationen über Dein Dateisystem haben.
Freundliche Grüße
Vinzenz
Hallo
error_reporting auf E_ALL setzen.
Gibt immer noch keine Fehlermeldung aus. Es lief ja auch schon auf dem lokalen Server.
Vergiß bitte nicht, dass wir keine Informationen über Dein Dateisystem haben.
Der lokale Server ist Windows XP mit Xampp, der richtige Server ist glaube ich Linux.
Muss für diese Funktion die GD libary installiert sein..?
Lg
Grüße,
Muss für diese Funktion die GD libary installiert sein..?
natürlich - aber du bekämest "unbekante funktion" wenn die nicht installiert wäre , also kanns daran nciht liegen.. adresse der bilder? linux handhabts ein wenig sensibler als windows.
MFG
bleicher
Hello,
Muss für diese Funktion die GD libary installiert sein..?
natürlich - aber du bekämest "unbekante funktion" wenn die nicht installiert wäre , also kanns daran nciht liegen.. adresse der bilder? linux handhabts ein wenig sensibler als windows.
Wenn ich mir die Jongliererei mit den Pfaden anschaue, steckt der Fehler sicherlich dort.
Eine von den While-Schleifen (oder vielleicht sogar beide, wenn sie dürften *g*) werden Thomas da 'nen Vogel zeigen...
Zumal die Laufbedingungen mit
while ($file = readdir ($handle))
{
}
auch falsch sind, es sei denn, man will, dass die Schliefe bei einem File namens '0' aufhört zu laufen.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom

Hallo zusammen,
Habe das Problem gefunde.
Die Bilder können nicht einfach so erstzt werden. Wenn sie anders genannt werden funktionierts.
Weiss jemand wie das mit dem ersetzen gehen könnte?
Lg
Hello,
Habe das Problem gefunde.
Die Bilder können nicht einfach so erstzt werden. Wenn sie anders genannt werden funktionierts.
Weiss jemand wie das mit dem ersetzen gehen könnte?
Das wird schon gehen, dass Du eine Datei überschreibst, denn Du erzeugst ja mit imageCreateFromJpeg() ein ausgepacktes Bild (unkomprimiert) im Speicher. Aus diesem machst Du im vorbereiteten Speicherbereich eine verkleinerte Kopie. Mit dieser kannst Du dann das urprüngliche File überschreiben. dazu muss dein PHP-Prozess aber Schreibrechte auf das File haben.
Sollte sich imageJpeg() weigern, was ich nicht glaube, würde immer noch unlink() zur Verfügung stehen. Das würde aber Schreibrechte im Verzeichnis erfordern.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom

Hoppla, da habe ich mich wohl getoschen.
Das Script funktioniert beim ersten Durchlauf, das heisst ein Bild wird verkleinert. Ansonsten funktionierts nicht... :(
Lg
Hallo
Das Script funktioniert beim ersten Durchlauf, das heisst ein Bild wird verkleinert. Ansonsten funktionierts nicht... :(
Baue endlich Debug-Ausgaben ein.
Verzeichnis- und Dateinamen wären ein Ansatz.
Dann solltest Du zumindest sehen, wo das Skript sich "verläuft".
Freundliche Grüße
Vinzenz
Hallo
Baue endlich Debug-Ausgaben ein.
Meinst du damit dass ich mir z.B. Die Pfade ausgeben lasse.?
Lg
Hallo Thomas,
Baue endlich Debug-Ausgaben ein.
Meinst du damit dass ich mir z.B. Die Pfade ausgeben lasse.?
Ja.
Grenze den Fehler ein.
Freundliche Grüße
Vinzenz
Hallo Thomas,
Die Bilder können nicht einfach so erstzt werden. Wenn sie anders genannt werden funktionierts.
und _das_ erzeugt _keine_ Fehlermeldung?
Freundliche Grüße
Vinzenz
Ahoi,
Also, dieses Script liegt im Hauptornder des Servers. In diesem Ordner liegt ebenfalls der Ornder galerie.
Soblad dass Script ausgeführt wird, werden alle Ordner im Verzeichniss galerie eingelesen.
Die Bilder in diesen Ordnern werden alle wieder ausgelesen und dann verkleinert und am alten Ort abgespeichert.
Ich hoffe so ist es etwas klarer.
Lg
Hello,
Die Bilder in diesen Ordnern werden alle wieder ausgelesen und dann verkleinert und am alten Ort abgespeichert.
Wenn Dein Script dann endlich mal anfängt, seine Arbeit zu tun, wird es aber nicht weit kommen.
Du hast vergessen, den Speicher für die ausgepackten Bilder wieder freizugeben.
Wenn Deine Bilder mit imageJPEG() weggeschrieben sind, solltest Du imagedestroy() bemühen.
http://de3.php.net/manual/en/function.imagedestroy.php
Warum benutzt Du nicht glob() für das Einlesen der Verzeichnisstruktur? Das ist wesentlich bequemer.
http://de3.php.net/manual/en/function.glob.php
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom

Hallo
error_reporting auf E_ALL setzen.
Gibt immer noch keine Fehlermeldung aus. Es lief ja auch schon auf dem lokalen Server.
Vergiß bitte nicht, dass wir keine Informationen über Dein Dateisystem haben.
Der lokale Server ist Windows XP mit Xampp, der richtige Server ist glaube ich Linux.
Was hat das damit zu tun? Ich weiß immer noch nicht, wie Deine Verzeichnisstruktur aufgebaut ist. Du gehst in Deinem Skript von vielen Dingen aus, die unbekannt sind. Du verläßt Dich darauf, dass das Ergebnis so ist, wie
Du es Dir vorstellst. Du prüfst keine Rückgabewerte auf potentielle Fehler. Du
machst keine Debug-Ausgaben. Wie willst Du Fehler finden?
Was diese Vorstellung ist, das kann ich nicht wissen.
Ein solches Skript ohne jegliche Kommentarzeile ist eine Zumutung für jeden
potentiellen Helfer. Es ist in einem halben Jahr eine Zumutung für Dich.
Alle Voraussetzungen, die Dir bekannt sind, die aber nicht selbstverständlich
sind, gehören in entsprechende Kommentare.
Freundliche Grüße
Vinzenz
echo $begrüßung;
error_reporting auf E_ALL setzen.
Gibt immer noch keine Fehlermeldung aus. Es lief ja auch schon auf dem lokalen Server.
Vergewissere dich bitte noch, z.B. mit phpinfo(), ob display_errors eingeschaltet ist. Im laufenden Betrieb sollte es zwar ausgeschaltet sein, was der Provider vielleicht auch so voreingestellt hat, aber zur Fehlerausgabe wird es eingeschaltet benötigt.
Wenn du es im Script mit ini_set() einschaltest, kann das allerdings schon zu spät sein, denn bei einem Parser-Error kommt es gar nicht erst zur Scriptausführung. Besser ist es, das je nach lokalen Gegebenheiten in der .htaccess oder einer lokalen php.ini einzuschalten. Frage ggf. deinen Provider, welche Möglichkeiten es gibt, PHP-Konfigurationswerte bereits im Verzeichnis zu ändern.
echo "$verabschiedung $name";