Bilder verkleinern (Script oder Extension)
Stefan E
- php
Hallo zusammen
Ich bin auf der Suche nach einem Script und gegebenenfalls auch nach einer neuen Extension für PHP um Bilder verkleinern zu können.
Momentan benütze ich ein folgendes Script http://forum.de.selfhtml.org/archiv/2002/7/t16495/. Doch dem Kunde ist die Qualität noch zu gering. Darum bin ich nun auf der Suche nach einem neuen Script. Wie oben schon erwähnt, kommt für mich auch eine neue extension für PHP in Frage.
Vielen Dank für die Antworten.
Benutze anstelle von imagecopyresized()
imagecopyresampled()
und anstelle von imagecreate() dann imagecreatetruecolor()
Bei der ausgabe über imagejpg() kannst du auch die entsprechende Qualität wählen..
Lieber Stefan,
ich habe genau das vor ein paar Tagen gemacht. Hier mein Code:
Datei "thumbnails.php"
<?php
//===================
// Thumbnails erstellen
//===================
//
// Verwendung:
// thumbnails.php?pfad=images/beispiel.jpg&maxx=100&maxy=100
//
// "pfad" enthält den _relativen_ Pfad zum Bild
// "maxx" ist die maximale Breite
// "maxy" ist die maximale Höhe
// übertragene Parameter auswerten
$pfad = "";
if(isset($_GET['pfad'])) $pfad = $_GET['pfad'];
$maxx = 100;
if(isset($_GET['pfad'])) $maxx = abs($_GET['maxx']);
$maxy = 100;
if(isset($_GET['pfad'])) $maxy = abs($_GET['maxy']);
// Bilddatei ausmessen
if($pfad == "")
{
die("kein Pfad!");
}
else
{
$bildtyp = exif_imagetype($pfad);
$bilddimensionen = getimagesize($pfad);
$originalx = $bilddimensionen[0];
$originaly = $bilddimensionen[1];
switch($bildtyp)
{
case IMAGETYPE_JPEG:
$bild = imagecreatefromjpeg($pfad);
break;
case IMAGETYPE_GIF:
$bild = imagecreatefromgif($pfad);
break;
case IMAGETYPE_PNG:
$bild = imagecreatefrompng($pfad);
break;
default:
$bild = imagecreatetruecolor($maxx, $maxy);
}
}
// Skalierung vornehmen
$ratio = $originalx / $originaly;
if($bilddimensionen[0] > $maxx && isset($_GET['maxx']))
{
$bilddimensionen[0] = $maxx;
$bilddimensionen[1] = floor($maxx / $ratio);
}
if($bilddimensionen[1] > $maxy && isset($_GET['maxy']))
{
$bilddimensionen[1] = $maxy;
$bilddimensionen[0] = floor($maxy * $ratio);
}
// Thumbnail erstellen
$thumbnail = imagecreatetruecolor($bilddimensionen[0], $bilddimensionen[1]);
$weiss = imagecolorallocate($bild, 255, 255, 255);
imagecopyresampled($thumbnail, $bild, 0, 0, 0, 0, $bilddimensionen[0], $bilddimensionen[1], $originalx, $originaly);
// Thumbnail ausgeben
header("content-type: image/jpeg");
imagejpeg($thumbnail);
imagedestroy($thumbnail);
?>
Hoffentlich nützt Dir der Code für Dein eigenes Vorhaben.
Es sei aber angemerkt, dass eine häufige Nutzung dieses Scripts (besonders bei größeren Bilddateien!) die Rechenlast des Servers in die Höhe treibt, was Deinen Provider nicht unbedingt freuen muss!
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Perfektes Script,
Bei nem kleinen jpg ging das gut aber bei Großen Fotos bekomm ich:
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 6528 bytes) in /srv/www/htdocs/web91/html/test/tmb.php on line 33
foto einfach zu groß oder was?
Kann ich die Allowed memory size ändern oder muss ich den Hoster anschwätzen?
Danke
Hi nochmal,
Könnte man bei deinem Script noch das ein oder ander unset(); einbauen oder auslagerungsdateien?
MfG
Gulli
Hi nochmal,
Könnte man bei deinem Script noch das ein oder ander unset(); einbauen oder auslagerungsdateien?
Auch schwachsinn:
bei $bild = imagecreatefromjpeg($pfad); kommt der fehler ja.
Da ist nix zu machen.