Avatar billede hvidlogspusher Nybegynder
09. august 2004 - 19:03 Der er 14 kommentarer og
1 løsning

crop thumbs med GD

hejsa

jeg skal have lavet mig en function så når man adder et billede bliver der automatisk lavet et thumbnail af billedet... dette thumbnail skal være i 300*100 uanset det oprindelig billede størrelse... hvordan undgår jeg så at ødelægge propationerne på billedet altså hvis jeg blot resizer til 300*100 kan billederne blive trukket aflange og lign... håber i kan hjælpe
Avatar billede stalle Nybegynder
09. august 2004 - 19:06 #1
Det kan blive svært at ungå at billederne bliver "deforme" når du bestemmer BÅDE højde og bredde.

Så mit råd ville være at du kun bestemmer fx bredden. Det selvfølgelig afhængig af hvordan dit design er
Avatar billede hvidlogspusher Nybegynder
09. august 2004 - 19:08 #2
jeg bliver nødt til at gøre dette og jeg har set det hvor det virker... ideen i det er at hvis jeg har et billede der er 600*600 og jeg vil have det ned i 300*100 så beskær man det til 600*200 og resizer til 300*100 på den måde undgår man jo at de bliver deformer... men jeg  ved ikke lige hvordan man gør dette
Avatar billede Slettet bruger
09. august 2004 - 19:12 #3
Men det er ikke sikkert billedet er 600 x 600? Så du skal have en funktion der læser billedets proportioner, og klipper det ned derefter, og så resizer det? Eller er alle billeder 600 x 600 ?
Avatar billede stalle Nybegynder
09. august 2004 - 19:12 #4
Okay, ja så er det forholdsvis nemt, når lige man kender GD, hvilket jeg ikke lige gør
Avatar billede hvidlogspusher Nybegynder
09. august 2004 - 19:14 #5
nej billedet variere i størrelse...

men det handler vel om at gå ind og kigge på propationerne... jeg kan bare ikke lige regne den ud...
Avatar billede Slettet bruger
09. august 2004 - 19:17 #6
Der findes jo getimagesize() - jeg kiggede lidt i folks comments, derimellem er der en der har lavet et "resize / cropping tool".

http://dk.php.net/manual/da/function.getimagesize.php
Avatar billede hvidlogspusher Nybegynder
09. august 2004 - 19:19 #7
har kigget men har ikke fundet noget brugbart
Avatar billede hvidlogspusher Nybegynder
09. august 2004 - 19:22 #8
jeg er kommet frem til følgende matematik men jeg har bare ikke kunne lave det i php... jeg ved at min propation skal være 3 altså 300/100...
jeg har f.eks. et billede på 521x231... den skal jo have propation 3 og derfor 521/3 så ved jeg at jeg skal beskær billedet i 521*173 og så resize det
Avatar billede detox Nybegynder
09. august 2004 - 20:36 #9
Her er et eksempel:

<?
$sti = 'img/'; // Sti til mappe med billeder
$billede = 'Aria.jpg'; // Billednavn
$source = $sti.$billede;
$new = $sti.'thumb_'.$billede; // Thumbnavn
list ($b, $h) = getimagesize($source);
if (($b/3)>$h) { // For bred
    $ny_b = $h*3;
    $ny_h = $h;
} elseif (($b/3)<$h) { // For høj
    $ny_h = round($b/3);
    $ny_b = $b;
} else { // Præcis det rette forhold
    $ny_h = $h;
    $ny_b = $b;
}
$fb = 300; // Færdig bredde/højde
$fh = 100;
$bs = round(($b-$ny_b)/2);
$hs = round(($h-$ny_h)/2);
$src_im = imagecreatefromjpeg($source);
$dst_im = imagecreatetruecolor($fb, $fh);
imagecopyresampled($dst_im, $src_im, 0, 0, $bs, $hs, $fb, $fh, $ny_b, $ny_h);
imagejpeg($dst_im, $new, 100);
?>
Avatar billede hvidlogspusher Nybegynder
10. august 2004 - 09:21 #10
ahh super detox... men hvordan vil det se ud hvis det var 160høj og 120bred... bare lige så jeg forstår det her helt
Avatar billede hvidlogspusher Nybegynder
10. august 2004 - 09:22 #11
så vil det være sådan her ikke:
<?
$sti = './'; // Sti til mappe med billeder
$billede = '1.jpg'; // Billednavn
$source = $sti.$billede;
$new = $sti.'thumb_'.$billede; // Thumbnavn
list ($b, $h) = getimagesize($source);
if (($b/1.3)>$h) { // For bred
    $ny_b = $h*1.3;
    $ny_h = $h;
} elseif (($b/1.3)<$h) { // For høj
    $ny_h = round($b/1.3);
    $ny_b = $b;
} else { // Præcis det rette forhold
    $ny_h = $h;
    $ny_b = $b;
}
$fb = 120; // Færdig bredde/højde
$fh = 160;
$bs = round(($b-$ny_b)/2);
$hs = round(($h-$ny_h)/2);
$src_im = imagecreatefromjpeg($source);
$dst_im = imagecreatetruecolor($fb, $fh);
imagecopyresampled($dst_im, $src_im, 0, 0, $bs, $hs, $fb, $fh, $ny_b, $ny_h);
imagejpeg($dst_im, $new, 100);
?>
Avatar billede hvidlogspusher Nybegynder
10. august 2004 - 09:40 #12
jeg ved ikke om jeg laver en fejl med de thumbs jeg får jeg ret grimme... meget kornet osv...
Avatar billede detox Nybegynder
10. august 2004 - 10:48 #13
Ja, måske skal du bruge round() her: $ny_b = $h*1.3; (Det rigtige tal er forøvrigt: 0.75). Det bedste er nok at udregne en deltaværdi automatisk:


<?
$sti = './'; // Sti til mappe med billeder
$billede = '1.jpg'; // Billednavn
$fb = 120; // Færdig bredde/højde
$fh = 160;
$delta = $fb/$fh;
$source = $sti.$billede;
$new = $sti.'thumb_'.$billede; // Thumbnavn
list ($b, $h) = getimagesize($source);
if (($b/$delta)>$h) { // For bred
    $ny_b = round($h*$delta);
    $ny_h = $h;
} elseif (($b/3)<$h) { // For høj
    $ny_h = round($b/$delta);
    $ny_b = $b;
} else { // Præcis det rette forhold
    $ny_h = $h;
    $ny_b = $b;
}

$bs = round(($b-$ny_b)/2);
$hs = round(($h-$ny_h)/2);
$src_im = imagecreatefromjpeg($source);
$dst_im = imagecreatetruecolor($fb, $fh);
imagecopyresampled($dst_im, $src_im, 0, 0, $bs, $hs, $fb, $fh, $ny_b, $ny_h);
imagejpeg($dst_im, $new, 100);
echo "<img src='$new' alt='' />"; // Viser eksempel på thumben
?>
Avatar billede detox Nybegynder
10. august 2004 - 10:53 #14
} elseif (($b/3)<$h) { // For høj

skal lige rettes til:

} elseif (($b/$delta)<$h) { // For høj
Avatar billede detox Nybegynder
11. august 2004 - 12:32 #15
Jeg kan altså ikke genkende at thumbs'ene skulle blive grimme eller kornede.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester