webForumDet fria alternativet

Förminska olika stora bilder till samma storlek?

PHP

2 svar · 267 visningar · startad av soocks

Medlem sedan feb. 200240 inlägg
Frågan#1

Har sökt efter liknane inlägg här men inte hittat det jag letat efter; hur tar men sej till för att förminska ett antal bilder till samma storlek oavsett tidigare storlek?

Jag har en hög med bilder som i originalläge är olika stora och jag vill att alla dessa ska bli 80x100px stora med hjälp av GD library.

Självklart blir då vissa delar av bilderna "bortklippta", men det skulle inte spela så stor roll om man på något sätt kunde utgå från mitten av bilden och "klippa" bort vid kanterna av bilden så att storleksförhållandena stämmer. På så sätt skulle inte svarta (eller annan färg) utfyllningar behövas och det skulle se bra ut.

Hoppas någon förstår vad jag menar :)

Medlem sedan aug. 20002 975 inlägg
#2

Jag har ett litet thumbnail-skript som gör bilderna kvadratiska 100x100.
Är bilden liggande så tas kvadraten ut från mitten av bilden,
är bilden stående så tas kvadraten ut från toppen av bilden.

Du kallar på skriptet med: thumb.php?pic=filnamn.jpg

Det går också att få större eller mindre bilder (dock kvadratiska)
om man anger det i URL-en: thumb.php?pic=filnamn.jpg&width=150

Skriptet är okommenterat, men om du tycker det är något så kan du
kanske själv klura ut hur du kan få bilderna att bli 80X100 istället.

Håll tillgodo, eller strunta i skriptet :)

<?php

$dir = "pictures/";  // Sökvägen till katalogen med bilder

if (isset($_GET['pic'])&& file_exists($dir.$_GET['pic'])) {

  header("Content-Disposition: inline; filename=thumb_".$_GET['pic']);
  
  if (isset($_GET['width'])) {
     $dstWH = $_GET['width'];
  } else $dstWH = 100;
  
  $info = getimagesize($dir.$_GET['pic']);
  if ($info[2] == 2) {
     $im_src = imagecreatefromjpeg($dir.$_GET['pic']);
  } else {
     $im_src = imagecreatefrompng($dir.$_GET['pic']);
  }
  
  if ($info[1] >= $info[0]) {
     $srcX = 0;
     $srcY = 0;
     $srcW = $info[0];
     $srcH = $info[0];
  } else {
     $srcX = round(($info[0] - $info[1])/2);
     $srcY = 0;
     $srcW = $info[1];
     $srcH = $info[1];
  }

  // Använd dessa om du inte har stöd för GD2 
  // $img_thumb = imageCreate($dstWH, $dstWH);
  // imagecopyresized ( $img_thumb, $im_src, 0, 0, $srcX, $srcY, $dstWH, $dstWH, $srcW, $srcH );
  
  // Använd dessa om du har stöd för GD2 
  $img_thumb = imageCreateTruecolor($dstWH, $dstWH);
  imagecopyresampled ( $img_thumb, $im_src, 0, 0, $srcX, $srcY, $dstWH, $dstWH, $srcW, $srcH );

  imageJPEG($img_thumb, '', 90);

  ImageDestroy($img_thumb);
  ImageDestroy($im_src);
  
}
?>
Medlem sedan feb. 200240 inlägg
#3

Matte: Det ser mycket bra ut, bugar och bockar! :)

255 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)