PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Thumnails beim Bildupload



Hondapower
01-02-2003, 08:14
Hallo,

durch die Suche bin ich noch nicht richtig schlau geworden...
Aber vielleicht kann mir jemand von euch bei meinem Problem helfen.

Ich habe vor eine Online Bilder-Galerie zu erstellen.
Diese soll dann datenbankgestützt laufen.

Für diese Gallerie benötige ich allerdings ein Upload Script, welches mir die Bilder, die hochgeladen werden auf eine feste Größe verkleinert also ein Thumbnail erstellt.
Weiterhin soll noch eine komprimierte Variante des Bildes erstellt werden (wenn man z.B. die Bilder direkt von der Digitalkamera hochlädt, da die Bilder eine beachtliche, fürs Web ungeeignete Größe haben).
So weit so gut...
Mir ist allerdings aufgefallen, das durch das Resizen mit PHP die Qualität spürbar verloren geht, wenn man die eingebauten ImageFunktionen nutzt (Treppeneffekte, Farbverschiebungen usw.)

Wenn es nicht möglich ist, eine gute Qualität mit einem PHP Upload Script zu erreichen, vielleicht gibt es da eine Möglichkeit sowas mit Perl zu realisieren?

P.S.: Ich habe keinen Zugriff auf den Server, da meine Webseite auf Shared Webspace liegt, ansonsten könnte man das Problem mit Imagemagick (schreibt man das so?) lösen.

Danke für eure Hilfe!

Gaert
01-02-2003, 13:51
Schau dir mal diesen Thread an, vielleicht hilft er dir ein wenig.

http://www.mrunix.de/forums/showthread.php?s=&threadid=30771&highlight=gallerie

Hondapower
01-02-2003, 22:44
Danke für den Link, aber auf diesen Thread bin ich bei der Suche auch schon gekommen.
Da werden ja im Prinzip auch diese PHP Funktionen zum "resizen" der Bilder genutzt.

Gibt es eigentlich eine Möglichkeit die Vorteile von Imagemagick zu nutzen, OHNE das man es auf dem Server installiert?
Als Perl-Modul oder so? Die darf ich bei meinem Provider einspielen, wenn ich da die FAQ richtig verstanden habe :confused:

Thx

mehlvogel
01-02-2003, 23:42
Hast du schon imagecopyresampled (http://de3.php.net/manual/en/function.imagecopyresampled.php) anstatt imagecopyresized probiert? Brauchst aber GDLib 2.x für. Die Qualität soll da besser sein.

Hondapower
02-02-2003, 09:19
Okay...

ich werde es mal versuchen, sobald meine Domain zum neuen Provider übertragen ist!
Zur Zeit sind mir da die Hände gebunden, da ich meine Scripte zwar hochladen, aber nicht austesten kann!
Meld mich wieder :p

Hondapower
05-02-2003, 17:51
So... KK ist vollzogen *freu*

Ist leider nur Vorfreude...

Kein GDLib 2.x zur Verfügung :(

Hab auch schon ein paar Thumbs mit imagecopyresized erstellt...
Funktionieren tut das Ganze, aber die Qualität lässt echt zu wünschen übrig.

Gibt es noch andere Möglichkeiten?


Gibt es eigentlich eine Möglichkeit die GDLib 2 nachzuziehen?
Habe allerdings keinen Zugriff auf den Server :(

Hondapower
06-02-2003, 18:27
Upload Script ist jetzt fertig...

Kann mir mal jemand sagen, ob ich da noch mehr Qualität aus den Bildern rausholen kann?
So richtig bin ich noch nicht zufrieden.
PHP Version ist 4.2.3

Hier mal ein Beispiel:

Original:
http://www.tunemaster.de/wartung/tmp/original.jpg

Resized:
http://www.tunemaster.de/wartung/tmp/resized.jpg

Thumbnail:
http://www.tunemaster.de/wartung/tmp/thumb.jpg

Und hier der Code:


// Generiert Zufallsnamen für Bild
$zahl = md5 (uniqid (rand()));
$image_name = $zahl[0] . $zahl[5] . $zahl[2] . $zahl[8] .
$zahl[1] . $zahl[9] . $zahl[11] .$zahl[10].$zahl[13]. $zahl[7];

// Die Datei Endung Bestimmen
$pic_typ = $_FILES['picture_a']['type'];
$extension = "";
if($pic_typ=="image/gif") $extension = "gif";
if ($pic_typ=="image/jpg") $extension = "jpg";
if ($pic_typ=="image/jpeg") $extension = "jpg";
if ($pic_typ=="image/pjpeg") $extension = "jpg";
if ($pic_typ=="image/png") $extension = "png";
if ($pic_typ=="image/bmp") $extension = "bmp";

// Destination
$destination = "../ressourcen/upload/original/".$image_name.".".$extension;

// Bild verschieben
move_uploaded_file ($_FILES['picture_a']['tmp_name'], "$destination");


//Originalbild einlesen
$h_img= imagecreatefromjpeg($destination);
$width= imagesx($h_img);
$height= imagesy($h_img);

if(($width <= 640) && ($height <= 480)) {
echo "Keine Komprimierung....";
}
else {
// BILD KOMPRIMIEREN AUF 640 Breite oder 480 Höhe\\



// Bildgröße berechnen (640 = Breite, 480 = Höhe)
if( ($width/$height) > (1+(1/3)) ) {
$thb_x = 640;
$thb_y = ($thb_x/$width)*$height;
}
else if( ($width/$height) < (1+(1/3)) ) {
$thb_y = 480;
$thb_x = ($thb_y/$height)*$width;
}
else {
$thb_x = 640;
$thb_y = 480;
}

$h_thb = imagecreate($thb_x, $thb_y);
imagecopyresized(
$h_thb,
$h_img,
0,
0,
0,
0,
$thb_x,
$thb_y,
$width,
$height);

// In File speichern
$image_dir = "../ressourcen/upload/images/" . $image_name . ".jpg";
imagejpeg($h_thb, "$image_dir", 85);
}

// Thumbnail erstellen \\

// Bildgröße berechnen (100 = Breite, 75 = Höhe)
if( ($width/$height) > (1+(1/3)) ) {
$thb_x = 100;
$thb_y = ($thb_x/$width)*$height;
}
else if( ($width/$height) < (1+(1/3)) ) {
$thb_y = 75;
$thb_x = ($thb_y/$height)*$width;
}
else {
$thb_x = 100;
$thb_y = 75;
}


$h_thb = imagecreate(100, 75);
$f1f1f1 = ImageColorAllocate ($h_thb, 241, 241, 241);
imagefilledrectangle ($h_thb, 0, 0, 100, 75, $f1f1f1);



// Verkleinern
imagecopyresized(
$h_thb,
$h_img,
0,
0,
0,
0,
$thb_x,
$thb_y,
$width,
$height
);

// In File speichern
$thumb_dir = "../ressourcen/upload/thumbs/" . $image_name . ".jpg";
imagejpeg($h_thb, "$thumb_dir", 85);



Für Verbesserungsvorschläge bin ich jederzeit offen!