Hallo,
ich musste feststellen, dass bei viel zu großen Grafiken PHP mit der GD-Bibliothek Probleme hat, diese Grafiken zu verkleinern, aber wie verkleinere ich Grafiken, wenn diese nicht verkleinerbar sind? Ich kann es weder lokal noch auf meinem Webspace. Mir würde zwar nicht einfallen, Grafiken, die 1.5MB groß sind, mit PHP bearbeiten zu wollen, aber wenn dritte, wie Kunden, auf solche Ideen kommen, wüsste ich jetzt nicht, wie ich es verhindern soll.
Zur Zeit verwende ich folgende Klasse, um Bilder aus einem Orginalverzeichnis automatisch für ein Thumbnail-Verzeichnis verkleinern zu lassen:
<?php
class VorschaubildGenerator {
private $verkleinerungsFaktor = 0.2;
private $vorschauFotoVerzeichnis = 'fotosPreview';
// Gibt das verkleinerte Bild zurück
public function minimizePicture($bigPicFilename, $year) {
$sourceImage = '';
//Bild auslesen, Grafiktyp: 1=GIF, 2=JPG, 3=PNG, 4=SWF
list($width, $height, $grafiktyp) = getimagesize($bigPicFilename);
$new_width = $width * $this->verkleinerungsFaktor;
$new_height = $height * $this->verkleinerungsFaktor;
// Resample
$destImage = imagecreatetruecolor($new_width, $new_height);
if ($grafiktyp == 1) { //GIF
$sourceImage = imagecreatefromgif($bigPicFilename);
imagecopyresampled($destImage, $sourceImage, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
imagegif($destImage, $this->vorschauFotoVerzeichnis .
DIRECTORY_SEPARATOR .
$year .
DIRECTORY_SEPARATOR .
basename($bigPicFilename), 100);
}
if ($grafiktyp == 2) { //JPG
$sourceImage = imagecreatefromjpeg($bigPicFilename);
imagecopyresampled($destImage, $sourceImage, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
imagejpeg($destImage, $this->vorschauFotoVerzeichnis .
DIRECTORY_SEPARATOR .
$year .
DIRECTORY_SEPARATOR .
basename($bigPicFilename), 100);
}
if ($grafiktyp == 3) { //PNG
$sourceImage = imagecreatefrompng($bigPicFilename);
imagecopyresampled($destImage, $sourceImage, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
imagepng($destImage, $this->vorschauFotoVerzeichnis .
DIRECTORY_SEPARATOR .
$year .
DIRECTORY_SEPARATOR .
basename($bigPicFilename), 100);
}
// Den neuen Vorschaubildlink zurückliefern
return basename($bigPicFilename);
}
}
?>
Könnte ich hier irgendetwas einbauen, um mit dem Problem fertig zu werden?
--
