Svar på FAQ fråga
Fråga: Hur skapar man minibilder?
Svar: Här kommer två olika sätt som du kan använda för att skapa minibilder.
(GD-library)?
Lite omständigt men eftersom de flesta har det installerat så kommer ett litet skript här:
Kod:
$stor_bild_url = "stor_bild.jpg";
$liten_bild_url = "liten_bild.jpg";
$liten_max_x = 100;
$liten_max_y = 100;
$liten_kvalite = 80;
// Läsen in den stora bilden och kollar storleken på den.
$stor_bild = imagecreatefromjpeg ($stor_bild_url);
$stor_x = imagesx ($stor_bild);
$stor_y = imagesy ($stor_bild);
// Räknar ut $k som är förhållandet mellan bredden och höjden.
$k = round ($liten_max_x / $stor_x);
if ($k * $stor_y > $liten_max_y) {
$k = round ($liten_max_y / $stor_y);
}
// Räknar ut bredden och höjden på mini-bilden.
$liten_x = $k * $stor_x;
$liten_y = $k * $liten_y;
// Skapar mini-bilden.
$liten_bild = imagecreate ($liten_x, $liten_y);
imagecopyresampled ($liten_bild, $stor_bild, 0, 0, 0, 0, $liten_x, $liten_y, $stor_x, $stor_y);
// Sparar mini-bilden
imagejpeg ($liten_bild, $liten_bild_url, $liten_kvalite);
//Tar bort bilderna ur minnet på PHP. Tar inte bort bilderna från hårddisken.
imagedestroy ($liten_bild);
imagedestroy ($stor_bild);
Om du inte vill spara minibild utan visa bilden direkt så byt ut
imagejpeg ($liten_bild, $liten_bild_url, $liten_kvalite);
mot:
header ("Content-type: image/jpg");
imagejpeg ($liten_bild, , $liten_kvalite);
Saker att tänka på
- imagecopyresampled() bara funkar i GD2. Har du bara GD1 så kan du använda imagecopyresized() vilket är lite snabbare men minibilden blir inte lika bra.
- PHP måste ha skrivrättigheter i mappen där minibilden ska skapas.
(ImageMagick?)
Lättast är att använda ImageMagick
?. Ett gratis program som går att köra från kommandopromten.
Kod:
$stor_bild_url = "stor_bild.jpg";
$liten_bild_url = "liten_bild.jpg";
$liten_max_x = 100;
$liten_max_y = 100;
$liten_kvalite = 80;
system ("/usr/X11R6/bin/convert -size ". $liten_max_x . "x" . $liten_max_y . " $stor_bild -resize "
. $liten_max_x . "x" . $liten_max_y . " -quality " . $liten_kvalite . " $liten_bild");
Saker att tänka på
- Sökvägen till convert varierar mellan server och server,
- PHP måste ha skrivrättigheter i mappen där mini-bilden ska skapas.
Kommentar
Inte något av kodexemplena är testade så funkar den inte så kan väl någon säga till. Planen är att lägga info om (GD-library)? och ImageMagick? för sig och inte i detta dokumentet.