webForumDet fria alternativet

Skapa miniatyr från del av bild?

PHP

6 svar · 782 visningar · startad av Guldstrand

Medlem sedan juli 20041 271 inlägg
Frågan#1

Hur löser jag det enklast om jag endast vill skapa en miniatyr från en liten del av en bild (centrerat)? *lite svårt att förklara*

Just nu använder jag följande kod för att skapa miniatyrer:

function thumb_pic($src, $dst, $maxW = 100, $maxH = 100) {
   $imagesize = getimagesize($src);
   $quality = 100;
   $srcX = 0;
   $srcY = 0;
   $orgW = $imagesize[0];
   $orgH = $imagesize[1];
 
   switch ($imagesize[2]) {
    case 1: // gif
      $src_im = imagecreatefromgif($src);
      break;
      
    case 2: // jpg
      $src_im = imagecreatefromjpeg($src);
      break;
      
    case 3: // png
      $src_im = imagecreatefrompng($src);
      break;
      
    default:
       trigger_error("Okänd bild-typ", E_USER_ERROR);
      break;
   }
   
   if ($orgW > $maxW) {
      $dstW = $maxW;
      $dstH = round($orgH * $dstW / $orgW);
   } else {
      $dstW = $orgW;
      $dstH = $orgH;
   }
   
   if ($dstH > $maxH) {
      $dstH = $maxH;
      $dstW = round($orgW * $dstH / $orgH);
   }
   
   $dst_im = imagecreatetruecolor($dstW, $dstH);
   imagecopyresampled($dst_im, $src_im, 0, 0, 0, 0, $dstW, $dstH, $orgW, $orgH);
   imagejpeg($dst_im, $dst, $quality);
   imagedestroy($dst_im);
   imagedestroy($src_im);
}

Miniatyren som skapas måste ha följande storlek:
690 × 396 pixlar (räknat från mitten av originalbilden)

(bifogar exempel)

exempel_del-av-bild.jpg
Medlem sedan juli 20023 617 inlägg
#2

Skriptet från denna tråd kan väl vara en bra start: http://www.webforum.nu/showthread.php?t=173981

Medlem sedan juli 20041 271 inlägg
#3

fiddler skrev:

Skriptet från denna tråd kan väl vara en bra start: http://www.webforum.nu/showthread.php?t=173981

Kanon! Det verkar vara precis det jag söker.

Medlem sedan juli 20041 271 inlägg
#4

En sak till... :r

Hur kan jag slå ihop min nuvarande kod:

function thumb_pic($src, $dst, $maxW = 100, $maxH = 100) {
   $imagesize = getimagesize($src);
   $quality = 100;
   $srcX = 0;
   $srcY = 0;
   $orgW = $imagesize[0];
   $orgH = $imagesize[1];
 
   switch ($imagesize[2]) {
    case 1: // gif
      $src_im = imagecreatefromgif($src);
      break;
      
    case 2: // jpg
      $src_im = imagecreatefromjpeg($src);
      break;
      
    case 3: // png
      $src_im = imagecreatefrompng($src);
      break;
      
    default:
       trigger_error("Okänd bild-typ", E_USER_ERROR);
      break;
   }

   
   if ($orgW > $maxW) {
      $dstW = $maxW;
      $dstH = round($orgH * $dstW / $orgW);
   } else {
      $dstW = $orgW;
      $dstH = $orgH;
   }
   
   if ($dstH > $maxH) {
      $dstH = $maxH;
      $dstW = round($orgW * $dstH / $orgH);
   }
   
   $dst_im = imagecreatetruecolor($dstW, $dstH);
   imagecopyresampled($dst_im, $src_im, 0, 0, 0, 0, $dstW, $dstH, $orgW, $orgH); 

   imagejpeg($dst_im, $dst, $quality);
   imagedestroy($dst_im);
   imagedestroy($src_im);
}

..med denna:

function thumb($pic)
{
	
	$x = 690; //Ny bredd på bilden
	$y = 396; //Ny höjd på bilden

	// Läser in den stora bilden och kollar storleken på den.
	$stor_bild = imagecreatefromjpeg($pic);
	$stor_x = imagesx($stor_bild);
	$stor_y = imagesy($stor_bild);
	
	//Plockar ut mitten
	$src_x = floor($stor_x/2 - $x);
	$src_y = floor($stor_y/2 - $y);

	// Skapar bilden.
	$thumb = imagecreatetruecolor($x, $y);
	imagecopyresampled($thumb, $stor_bild, 0, 0, $src_x, $src_y, $x, $y, $x*2, $y*2);

	// Skriver ut bilden
	imagejpeg ($thumb,NULL,80);

	//Tar bort bilderna ur minnet.
	imagedestroy($thumb);
	imagedestroy($stor_bild);
}

Med min nuvarande kod, så skapas två olika miniatyrer, (en liten och en mellan).

Liten: 330 × 190 pixlar
Mellan: 690 × 396 pixlar

Medlem sedan juli 20041 271 inlägg
#5

Jag är oerhört tacksam för hjälp med mitt senaste inlägg ovan.
(Har stirrat mig blind.)

Medlem sedan juli 20023 617 inlägg
#6

Jag kan kolla på den vid tillfälle. Dock ska jag snart iväg igen...

Medlem sedan juli 20041 271 inlägg
#7

fiddler skrev:

Jag kan kolla på den vid tillfälle. Dock ska jag snart iväg igen...

Underbart! Tack på förhand... :e

260 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)