Gå til innhold

Lage thumbs bilde hvor bilde har like høyde og bre


Anbefalte innlegg

Hei.

Jeg har søkt litt på google, men (kanskje) siden jeg ikke er så god til og søke fant jeg det ikke. Problemet mitt lyder slik;

 

Jeg trenger et php script som bruker gd til og minske bilder til feks 24x24. Jeg har funnet og fått til og virke andre thumbs script, men de resizer bilde mindre, men de gjør ikke slik at høyden og bredden blir lik. Og vis jeg setter dette i html blir bilde ikke seende fint ut, da blir det strekt ene veien. Noen som vet om et script (eller kan poste ett her) som lager thumbs bilde hvor sidene blir like lange, men det ikke blir strekt eller sånn. Vet det finnes, har bare ikke funnet selve scriptet:P

 

Edit: fant et eksempel.

Se på hvilken som helst profil her på diskusjon.no, alle brukere som har postet bilde i sin profil har i etterkant et bilde på profilen som er like bred som lang.

Tusen takk :)

Endret av [email protected]
Lenke til kommentar
Videoannonse
Annonse

Vel først og fremst må jeg jo få si det at viss bilde ikke er kvadratisk i utgangspunkt, så vil blide bli strukket den ene eller den andre veien uansett...

Her en kodesnutt som jeg laga for en stund siden. Resultat blir at jpeg bilde av ønsket høyde/bredde:

 


@file Filnavn
@path Sti til filen
@prefix Prefiks til nytt filnavn
@newwidt @newhight Størrelse (oppgi heltal)
function resize($file,$path,$prefix,$newwidth,$newheight) {
 $filename = $path ."/". $file;
 $image_type = strstr($filename, '.');
 switch($image_type) {
   case '.jpg':$source = imagecreatefromjpeg($filename);break;
   case '.png':$source = imagecreatefrompng($filename); break;
   case '.gif':$source = imagecreatefromgif($filename);break;
   default: echo("Error Invalid Image Type"); return;
   break;
 }
 list($width, $height) = getimagesize($filename);
 $thumb = imagecreatetruecolor($newwidth, $newheight);
 imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
 $im = $path . "/" . $prefix. $file;
 print("\nOld: " .$filename."\n\tNew: ".$im);
 imagejpeg($thumb, $im, 60);
}

Lenke til kommentar

Vel Nazgul, da får han jo det han allerede har. Men enig at det nok er den beste løsningen, dersom han vil ha med hele bildet.

 

Som Crysys sier, så vil bildet bli strekt dersom bredde og høyde forholdet er ulik 1, og du vil ha med hele bildet.

 

Det du derimot kan gjøre, er å klippe ut litt av bildet.

Hvis du f.eks vil ha et bilde på 24x24, og bildet opprinnelig er på 1024x768, så kan du forminske bildet slik at den korteste siden blir 24. Også kan du bare klippe ut f.eks 24px av midten av bildet, eller 24px fra venstre hjørne eller hva du vil.

 

Alt dette kan gjøres vha gd.

 

Se på imagecopyresampled

 

EDIT:

Et lite eksempel :

Du har et bilde som du har resizet til 24x48 pixler:

$newwidth=24;
$newheight=24;
$info = getimagesize($file);
$cutx = ($info[0]/2)-($newwidth/2);
$cuty = ($info[1]/2)-($newheight/2);
imagecopyresampled($img_dst, $img_src, 0, 0,  $cutx, $cuty, $newwidth, $newheight, $info[0], $info[1]);

$cutx blir da: (24/2)-(24/2)=0

$cuty blir da: (48/2)-(24/2)=24-12 = 12

Det vil si at den vil kutte bildet ved x=0 og y=12 (På dette punktet vil øvre venstre hjørne av det nye bildet bli)

Hvilket igjen betyr at du "bare" mangler 12px fra toppen og bunnen av bildet...

 

OBS: Scriptet er ikke testet i det hele tatt.

 

/K

Endret av kakkle
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...