Probleme bei Thumbnailerstellung

Hallo,

also ich bastel nun schon seit geraumer Zeit an einem „einfachen“ Thumbnailscript. Das Ganze wird für einen Kumpel erstellt. Er soll so wenig Aufwand wie möglich haben. Also habe ich das Script so designed, das er nur noch in ein bestimmtes Stammverzeichnis ein neues Verzeichnis mit einem festen Format anlegen muss und dort die ursprünglichen reinlädt. Das Format ist ein umgedrehtes Datum. Das ist deswegen so, da er eine kleine Firma aufbauen will, die sich mit Clubevents etablieren will. Diese Events haben halt ein Datum und darunter sollen es die User später auch finden können.
Soweit zur Theorie…
Ich habe es soweit, dass das Script die Verzeichnisse einliest, prüft ob Bilder (JPEGs) drin sind und ob davon schon Thumbnails existieren. Wenn nicht, sollen diese erzeugt werden. Bei der Erzeugung passiert dann das Dilemma! Es erstellt nur 0 Byte große Bilder. Keine Ahnung, wo das Problem liegt. Habe recherchiert und gesucht, finde aber nichts! Vielleicht kann mir jemand von Euch helfen! Ich habe die beiden PHP Scripte mal auf meinen FTP geladen. Aber ausführbar sollten sie da nicht sein, da es ja eine komplett andere Verzeichnisstruktur benötigt.

Hier die beiden Dateien:

http://www.all4fian.de/tmp/bit.php
http://www.all4fian.de/tmp/thumbnail.inc.php

Eigentlich sollte nur thumbnail.inc.php interessant sein. Es ist der funktionale, ausgelagerte Teil des Scriptes. bit.php ruft nur die Funktionen auf.

Freue mich auf eine schnelle Hilfe.

Liebe Grüße aus Berlin
Holger

damit kann man nichts anfangen *g*
wenn auf Deinem Webserver kein php-Modul installiert wäre könnte man den sourcecode lesen… So wie es jetzt ist erhält man leider nur die html-Angabe.

Benenne mal die Datei um so dass php sie nicht mehr als php-scripte erkennt und poste die links nochmal… Beispielsweise als .txt datei

Gruss
Munich

Ooops, sorry. Hatte ich ganz vergessen :wink:

Hier jetzt die Links, die Text anzeigen sollten:

http://www.all4fian.de/tmp/bit.php.txt
http://www.all4fian.de/tmp/thumbnail.inc.php.txt

meanwhile…
ich hab in der Zwischenzeit ein wenig eruiert was das betrifft…
Vorab: Ich musste erst die GD-Library aktivieren, bevor das ging. Bei meinem webserver-paket ging das ganz problemlos und unter PHP 4.3+ sollte das wohl auch kein grosses Problem sein…
source: http://www.boutell.com/gd/
mit diesem kleinen Script kannst Du schnell testen ob es funktioniert oder nicht:

header ("Content-type: image/png");
$im = @ImageCreate (50, 100)
 or die ("Kann keinen neuen GD-Bild-Stream erzeugen");
$background\_color = ImageColorAllocate ($im, 255, 255, 255);
$text\_color = ImageColorAllocate ($im, 233, 14, 91);
ImageString ($im, 1, 5, 5, "Ein Test-String", $text\_color);
ImagePNG ($im);
?\>

wenn das nicht funktioniert dann weisst Du dass es an der GD-Library liegt, dass es nicht funktioniert…
Ansonsten habe ich in der zwischenzeit folgendes Script gefunden.
Das einzige was Du machen musst ist die Funktion
create_thumb_hfixed mit den selbsterklärenden Variablen aufzurufen…
Sollte denke ich kein Problem sein… Wenn Du dann noch eine Schleife baust, die eben diese Funktion aufruft, wenn keine thumbnails vorhanden sind, dann ist das ganze denke ich schnell geschehen :wink:
Dein Script hab ich mir jetzt gar nicht mehr angesehen, weil dieses gleich so schön funktioniert hat *g*

function create\_thumb\_hfixed($file\_name\_src, $file\_name\_dest, $height, $quality=100)
{

 if (file\_exists($file\_name\_src) && isset($file\_name\_dest))
 {
 $est\_src = pathinfo(strtolower($file\_name\_src));
 $est\_dest = pathinfo(strtolower($file\_name\_dest));

 $size = getimagesize($file\_name\_src);
 $h = number\_format($height, 0, ',', '');
 $w = number\_format(($size[0]/$size[1])\*$height,0,',','');

 // IMPOSTAZIONE STREAM DESTINAZIONE
 if ($est\_dest['extension'] == "gif" || $est\_dest['extension'] == "jpg")
 {
 $file\_name\_dest = substr\_replace($file\_name\_dest, 'jpg', -3);
 $dest = imagecreatetruecolor($w, $h);
 imageantialias($dest, TRUE);
 } elseif ($est\_dest['extension'] == "png")
 {
 $dest = imagecreatetruecolor($w, $h);
 imageantialias($dest, TRUE);
 } else
 {
 return FALSE;
 }

 // IMPOSTAZIONE STREAM SORGENTE
 switch($size[2])
 {
 case 1: //GIF
 $src = imagecreatefromgif($file\_name\_src);
 break;
 case 2: //JPEG
 $src = imagecreatefromjpeg($file\_name\_src);
 break;
 case 3: //PNG
 $src = imagecreatefrompng($file\_name\_src);
 break;
 default:
 return FALSE;
 break;
 }

 imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $h, $size[0], $size[1]);

 switch($size[2])
 {
 case 1:
 case 2:
 imagejpeg($dest,$file\_name\_dest, $quality);
 break;
 case 3:
 imagepng($dest,$file\_name\_dest);
 }
 return TRUE;
 }
 return FALSE;
}
function create\_thumb\_wfixed($file\_name\_src, $file\_name\_dest, $weight,$quality=100)
{

 if (file\_exists($file\_name\_src) && isset($file\_name\_dest))
 {
 $est\_src = pathinfo(strtolower($file\_name\_src));
 $est\_dest = pathinfo(strtolower($file\_name\_dest));

 $size = getimagesize($file\_name\_src);
 $w = number\_format($weight, 0, ',', '');
 $h = number\_format(($size[1]/$size[0])\*$weight,0,',','');

 // IMPOSTAZIONE STREAM DESTINAZIONE
 if ($est\_dest['extension'] == "gif" || $est\_dest['extension'] == "jpg")
 {
 $file\_name\_dest = substr\_replace($file\_name\_dest, 'jpg', -3);
 $dest = imagecreatetruecolor($w, $h);
 imageantialias($dest, TRUE);
 } elseif ($est\_dest['extension'] == "png")
 {
 $dest = imagecreatetruecolor($w, $h);
 imageantialias($dest, TRUE);
 } else
 {
 return FALSE;
 }

 // IMPOSTAZIONE STREAM SORGENTE
 switch($size[2])
 {
 case 1: //GIF
 $src = imagecreatefromgif($file\_name\_src);
 break;
 case 2: //JPEG
 $src = imagecreatefromjpeg($file\_name\_src);
 break;
 case 3: //PNG
 $src = imagecreatefrompng($file\_name\_src);
 break;
 default:
 return FALSE;
 break;
 }

 imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $h, $size[0], $size[1]);

 switch($size[2])
 {
 case 1:
 case 2:
 imagejpeg($dest,$file\_name\_dest, $quality);
 break;
 case 3:
 imagepng($dest,$file\_name\_dest);
 }
 return TRUE;
 }
 return FALSE;
}

Hoffe das hilft Dir weiter…
Gruss
Munich

Hmm, also so langsam verzweifle ich wirklich.

Habe die Funktion einfach mal übernommen und ausprobiert. Zu allererst kennt das PHP vom Webspaceprovider keine imageantialias() Funktion. Also auskommentiert und neu versucht --> das gleiche Spielchen! Die erzeugten Dateien sind 0 Byte gross.

Um sicher zu gehen habe ich dann Dein Testscript übernommen - und, es funktioniert! Also GD ist da, aber irgendetwas anderes macht da n totalen Strich durch die Rechnung!

guck mal nach der verwendeten php-version

phpinfo();
?\>

wie Du hier sehen kannst http://de.php.net/manual/en/function.imageantialias.php
gibt es imageantialias erst ab PHP 4.3.2
eventuell hilft es Dir ja weiter… Ab PHP 4.3.2 sollte GD in Version 2.0.xx eingepflegt sein. Davor ist wohl lediglich Version 1.8.4 verfügbar. Möglich, dass es daran liegt, dass nicht alle Funktionen erkannt werden.
Am einfachsten wäre es dabei wohl wenn man einen eigenen Webserver hätte, weil man da dann installieren/compilieren kann was man gerade braucht…

recht viel weiterhelfen werde ich Dir da leider auch nicht können, da es für mich auch neuland ist… Evtl kannst Du ja auch den Provider anschreiben, ob es nicht möglich wäre php und GD upzudaten (falls sie wirklich alt sind)…

achja… phpinfo zeigt Dir auch GD an… bei meinem Rechner sieht das so aus:

gd
GD Support enabled 
GD Version bundled (2.0.15 compatible) 
FreeType Support enabled 
FreeType Linkage with freetype 
GIF Read Support enabled 
JPG Support enabled 
PNG Support enabled 
WBMP Support enabled 
XBM Support enabled 

darauf kann man vielleicht auch aufbauen, woran es liegt…
Achja… bevor ichs vergesse - Deine input files sind schon jpg, png oder gif, oder? Ansonsten wäre mir nämlich schon klar, warum es nicht klappt *g* evtl machts sogar noch unterschiede ob jpeg oder jpg… allerdings hab ich darüber jetzt nicht weiter recherchiert…

nur nochn kleiner tip, benenn die dateien statt .txt mal .phps, sieht schöner aus und lässt sich leichter lesen…

[Welche PHP-Version?]

Also installiert ist die 4.3.1 von PHP. Und GD Unterstützung ist drin. Unter GD steht, es sei die bundled Version (logisch) und 2.0.x kompatibel. Von daher sollte es keine Probs geben!

Diese antialiasing Funktion ist ja auch nicht zwingend wichtig. Hab mir ja auch die Seite angeschaut und daher hab ich es aus den Funktionen, die Du gepostet hattest, einfach auskommentiert.

Achja… bevor ichs vergesse - Deine input files sind schon
jpg, png oder gif, oder? Ansonsten wäre mir nämlich schon
klar, warum es nicht klappt *g* evtl machts sogar noch
unterschiede ob jpeg oder jpg… allerdings hab ich darüber
jetzt nicht weiter recherchiert…

Also es gehen JPGs rein und sollen auch wieder rauskommen! Deswegen verwundert es mich ja. Irgendetwas läuft da aber trotzdem schief.
Die Endungen sind egal. Also grundsätzlich. Kann allerdings sein, das es ursprünglich Unterschiede gab.
Die Ursprungsbilder sind auch OK. Zumindest zeigen sie die Browser ordnungsgemäß an!

Hallo !

Hallo,

http://www.all4fian.de/tmp/bit.php
http://www.all4fian.de/tmp/thumbnail.inc.php

Auf Anhieb fällt mir auf:

$newWidth = $newWidth * 0.70;

…da bitte auch intval

ImageCopyResized($newImg, $oldImg, 0, 0, 0, 0, $newWidth, $newHeigt, $width, $height);

… das $newHeigt ist sicher nen Tippfehler, bei gd2 gibt imagecopyresampled eine bessere Qualität

Schreibe mal error_reporting(E_ALL) an den Anfang des Scriptes, und sehe nach, was noch für Fehlermeldungen kommen…

Alexander

$newWidth = $newWidth * 0.70;

…da bitte auch intval

ImageCopyResized($newImg, $oldImg, 0, 0, 0, 0, $newWidth,
$newHeigt, $width, $height);

… das $newHeigt ist sicher nen Tippfehler, bei gd2 gibt
imagecopyresampled eine bessere Qualität

Schreibe mal error_reporting(E_ALL) an den Anfang des

DANKE!!!

Wohin muss ich das Bier schicken?
Auf die Idee hätte ich auch mal kommen können! Ich hatte ein paar fiese Tippfehler bei den Variablennamen drin! Die sind mir bei den doch schon etwas längeren Source nicht aufgefallen!

Jetzt läuft es! Danke!