<< Tilbage
Resize billeder med GD-lib
Som standard kan man ikke umiddelbart bearbejde billeder i php. Det kræver en for for extension/udvidelse, hvor gdlib er den mest brugte. Gdlib er samtidig slået til på de fleste servere, så det er denne extension der er forklaret her.
Kan jeg bruge gdlib?
Inden vi går igang, er det en god ide lige at tjekke hvorvidt gdlib overhovedet er slået til på serveren. Opret et php-dokument og lad det indeholde følgende:
Kode:
Kør scriptet og kig efter overskriften "gd", hvor du så kan se om gdlib er "enabled" (se screenshot)
Koden
Funktionen, vi skal bruge til at resize, tager en del af et billede og kopiere det over på et andet billede, i en ny størrelse. Det vi gør er at loade det fulde billede, oprette et tomt billede/lærred, og så kopiere det fulde billede over på det tomme billede i f.eks. 100x100.
Men allerførst starter vi med at definere hvilken størrelse det nye resizede billede skal have. Denne metode angiver i procent hvor stort det nye billede skal være i forhold til det originale:
Kode: 1. 2. 3. 4. 5. 6. 7. 8.
|
<?php list($bredde, $hojde) = getimagesize("mitbillede.jpg"); //Find højden og bredden på det billede jeg vil resize $procent = 15; //Hvor mange procent skal det nye billede være i forhold til det originale?
//Find den nye højde og bredde $bredde_ny = round(($bredde*$procent)/100); $hojde_ny = round(($hojde*$procent)/100); ?>
|
Så kommer $bredde_ny og $hojde_ny til at indeholde størrelserne på det nye billede, som i eksemplet vil være 15 procent i forhold til originalen.
En anden metode man kan bruge, er at angive en fast bredde (hvilket er nyttigt hvis man bl.a. vil lave en side med mange thumbnails). Så er det kun højden der skal beregnes, så forholdet mellem højde og bredde stadig bevares. Det kan gøres på denne måde:
Kode: 1. 2. 3. 4. 5. 6. 7. 8.
|
<?php list($bredde, $hojde) = getimagesize("mitbillede.jpg"); //Find højden og bredden på det billede jeg vil resize $forhold = $hojde/$bredde; //Hvor stor er højden i forhold til bredden?
//Find den nye højde og bredde $bredde_ny = 100; $hojde_ny = round($bredde_ny*$forhold); ?>
|
Så skal vi have læst billederne ind (det originale billede, og et tomt billede med den nye størrelse).
Kode: 1. 2. 3. 4.
|
<?php $source = imagecreatefromjpeg("mitbillede.jpg"); $destination = imagecreate($bredde_ny, $hojde_ny); ?>
|
Først bruger vi i linje 2 imagecreatefromjpeg() med stien til billedet som parameter. Er det ikke et jpeg billedet man forsøger at indlæse, men i stedet gif eller png, så kan man bruge henholdsvis imagecreatefromgif() og imagecreatefrompng(). I linje 3 laver vi et tomt billede, hvor bredden og højden er angivet i funktionens parametre.
Så er vi klar til at kalde selve funktionen der bruges til at resize. Den hedder imagecopyresized() og vi gør følgende:
Kode: 1. 2. 3.
|
<?php imagecopyresized($destination, $source, 0, 0, 0, 0, $bredde_ny, $hojde_ny, $bredde, $hojde); ?>
|
Så mangler vi bare at gemme billedet til en fil, vha. funktionen imagejpeg() (eller imagegif() eller imagepng() alt efter hvilken filtype du ønsker ud).
Kode: 1. 2. 3.
|
<?php imagejpeg($destination, "nyfil_resized.jpg"); ?>
|
Den komplette bliver således:
Kode: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
|
<?php list($bredde, $hojde) = getimagesize("mitbillede.jpg"); //Find højden og bredden på det billede jeg vil resize $forhold = $hojde/$bredde; //Hvor stor er højden i forhold til bredden?
//Find den nye højde og bredde $bredde_ny = 100; $hojde_ny = round($bredde_ny*$forhold);
//Load/opret billeder $source = imagecreatefromjpeg("mitbillede.jpg"); $destination = imagecreate($bredde_ny, $hojde_ny);
//Resize imagecopyresized($destination, $source, 0, 0, 0, 0, $bredde_ny, $hojde_ny, $bredde, $hojde);
//Gem imagejpeg($destination, "nyfil_resized.jpg"); ?>
|
|