Bilder verkleinern

Stelo

Erfahrenes Mitglied
Hallo,

ich möchte eine kleine Galerie erstellen, in der jeder seine Bilder hochladen kann.
Nur laden manche ihrere Bilder aber hoch, obwohl idese noch verdammt groß sind. Deshalb würde ich diese gern verkleinern.
Eine feste Größe fpr width und height anzugeben ist allerdings doof, da ich ja nicht weiß, ob das Bild nun für hoch oder quer ist.
Also meine Frage wäre, ob man einstellen kann, dass die längste Seite z.B. auf 400 px verkleinert wird und die kürzere dann halt auf 200px, bzw. am besten proportional?
Das soll allerdings bei der Ausgabe passieren, dass Bild kann ruhig größer gespeichert werden.

Ich habe mir dafür mal ein Script gesucht, aber es funktioniert irgendwie nicht ganz.

PHP:
<?php
$id = 0;
$kategorie = $_GET['kategorie'];

$sql = "SELECT * FROM bilder WHERE id > '$id' AND id_kategorie = '$kategorie'  LIMIT 1";
$result = mysql_query($sql) OR mysql_error();
$row = mysql_fetch_assoc($result);

$id = $row['id'];
$name = $row['url'];


$Grafikdatei = "upload/$name";

$Bilddaten = getimagesize($Grafikdatei);

$OriginalBreite = $Bilddaten[0];
$OriginalHoehe = $Bilddaten[1];
$ThumbnailBreite = 128;

if($OriginalBreite < $ThumbnailBreite)
{
    $ThumbnailBreite=$OriginalBreite;
}

$Skalierungsfaktor = $OriginalBreite/$ThumbnailBreite;
$ThumbnailHoehe = intval($OriginalHoehe/$Skalierungsfaktor);

if($Bilddaten[2] == 1)
{
    $Originalgrafik = ImageCreateFromGIF($Grafikdatei);
    $Thumbnailgrafik = ImageCreateTrueColor($ThumbnailBreite, $ThumbnailHoehe);
    ImageCopyResized($Thumbnailgrafik, $Originalgrafik, 0, 0, 0, 0, $ThumbnailBreite, $ThumbnailHoehe, $OriginalBreite, 

$OriginalHoehe);
    ImageGIF($Thumbnailgrafik, "thumb_".$Grafikdatei);
}
elseif($Bilddaten[2] == 2)
{
    $Originalgrafik = ImageCreateFromJPEG($Grafikdatei);
    $Thumbnailgrafik = ImageCreateTrueColor($ThumbnailBreite, $ThumbnailHoehe);
    ImageCopyResized($Thumbnailgrafik, $Originalgrafik, 0, 0, 0, 0, $ThumbnailBreite, $ThumbnailHoehe, $OriginalBreite, 

$OriginalHoehe);
    ImageJPEG($Thumbnailgrafik, "thumb_".$Grafikdatei);
}
elseif($Bilddaten[2] == 3)
{
    $Originalgrafik = ImageCreateFromPNG($Grafikdatei);
    $Thumbnailgrafik = ImageCreateTrueColor($ThumbnailBreite, $ThumbnailHoehe);
    ImageCopyResized($Thumbnailgrafik, $Originalgrafik, 0, 0, 0, 0, $ThumbnailBreite, $ThumbnailHoehe, $OriginalBreite, 

$OriginalHoehe);
    ImagePNG($Thumbnailgrafik, "thumb_".$Grafikdatei);
}
echo"<img src=\"thumb_",
    $Grafikdatei,
    "\">";

imagedestroy()

?>

Ich bekomme folgenden Fehler:
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'thumb_upload/100_1451.jpg' for writing in /usr/export/www/vhosts/funnetwork/hosting/geilezeit/bild.php on line 41

Warning: Wrong parameter count for imagedestroy() in /usr/export/www/vhosts/funnetwork/hosting/geilezeit/bild.php on line 54

Vllt. kann mir ja da auch gleich jemand helfen, und ich brauch kein neues Script.

Danke schon mal! ^^
 
Die erste Fehlermeldung bedeutet, glaube ich, dass nicht genügend Rechte gesetzt sind um das Bild zum Schreiben zu öffnen... [phpf]chmod[/phpf] mal ausprobieren.

[phpf]imagedestroy[/phpf] erwartet die Bildressource. Arbeitet also nicht wie session_destroy().
 
imagedestroy($Grafikdatei) funktioniert allerdings auch nicht.

Dann noch eine Frage: Kann ich in den Code auch irgendetwas einbaun, dass immer die kürzere Seite auf die angegebene Größer verkleinert wird?
Denn die Bilder im Hochformat sind wesentlich größer als die, im querformat, was mich etwas stört.
 
Okay, also noch mal eine Frage. Ich möchte nach dem Aufrufen des Bilders den Speicher gern wieder freigeben.

imagedetroy() gibt jedoch einen Fehler aus, denn ich habe in dem Code ja auch nicht imagecreate() verwendet und so weit ich weiß, gehören die beiden ja zusammen.
Gibt es noch eine andere Möglichkeit, dass Bild wieder vom Arbeitsspeicher zu löschen?
 
PHP:
$Originalgrafik = ImageCreateFromGIF($Grafikdatei);
    $Thumbnailgrafik = ImageCreateTrueColor($ThumbnailBreite, $ThumbnailHoehe);

Du erstellst also keine Bilder? ;)
 
Zurück