Avatar billede xfox Nybegynder
24. februar 2008 - 17:01 Der er 3 kommentarer og
1 løsning

Crop et billede med imagecopyresized

Jeg har en formular hvor brugerne kan uploade billeder. Billederne skal herefter laves om til 60x60 med resize og crop. Jeg har fundet et script der croper halvdelen af et billede, og derefter laver et resize til 60x60, men i mit tilfælde skal så meget af originalen bibeholdes, og kun den del der er for meget skal cropes. Det skal desunden være sådan at der skal cropes fra midten, dvs. at er bileldet for højt, skal der skæres lige meget af top og bund, og er billedet for bredt, skal der tages lige meget af højre og venstre side. Jeg har som sagt fundet nedenstående script, men kan ikke finde ud af hvad parameterne helt præcist gør(og jo jeg har også kigget i php manualen). Er der nogen der kan se hvordan scriptet skal omskrives, så det passer til mine krav?


// Set our crop dimensions.
$width = 60;
$height = 60;
// Get dimensions of existing image
$dimensions = getimagesize('brugere/profilbilleder/test.jpg');
// Prepare canvas
$canvas = imagecreatetruecolor($width,$height);
$piece = imagecreatefromjpeg('brugere/profilbilleder/test.jpg');
// Prepare image resizing and crop -- Center crop location
$newwidth = (($dimensions[0]-$width)/2)-$width;
$newheight = $dimensions[1];
$cropLeft = ($newwidth/2) - ($width/2);
$cropHeight = ($newheight/2) - ($height/2);
// Generate the cropped image
imagecopyresized($canvas, $piece, 0,0, $cropLeft, $cropHeight, $width, $height, $newwidth, $newheight);
// Write image or fail
if (imagejpeg($canvas,'brugere/profilbilleder/test.jpg',90)) {
echo 'Image crop successful';
} else {
echo 'Image crop failed';
}
// Clean-up
imagedestroy($canvas);
imagedestroy($piece);
Avatar billede jakobdo Ekspert
24. februar 2008 - 20:38 #1
Jeg tror du kan bruge denne funktion:
function resizeCenter( $filename, $newfilename, $max_width_or_height, $quality=85 )
{
  $ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
  switch($ext)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      $srcim = imagecreatefromjpeg( $filename );
      break;
    case 'gif':
      $srcim = imagecreatefromgif( $filename );
      break;
    case 'png':
      $srcim = imagecreatefrompng( $filename );
      break;
    default:
      return false;
  }
  $ow = imagesx( $srcim );
  $oh = imagesy( $srcim );

    $original_min_width_or_height = min($ow,$oh);

  $crop_width  = floor(($ow - $original_min_width_or_height)/2);
  $crop_height = floor(($oh - $original_min_width_or_height)/2);
 
  $dstim = imagecreatetruecolor( $max_width_or_height, $max_width_or_height );
  imagecopyresampled( $dstim, $srcim, 0, 0, (0+$crop_width), (0+$crop_height), $max_width_or_height, $max_width_or_height, ($ow-($crop_width*2)), ($oh-($crop_height*2)) );
 
  switch($ext)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      imagejpeg( $dstim, $newfilename, $quality );
      break;
    case 'gif':
      imagegif( $dstim, $newfilename );
      break;
    case 'png':
      $png_q = floor( abs( $quality / 10 - 9.9 ) );
      imagepng( $srcim, $newfilename, $png_q );
      break;
    default:
      return false;
  }
  imagedestroy( $dstim );
  imagedestroy( $srcim );
  return file_exists($newfilename);
}

Den kaldes på følgende måde:

resizeCenter( $filnavn, $nyt_filnavn, $hoejde_eller_bredde, $kvalitet);

$filnavn = Navnet på filens som skal resizes.
$nyt_filnavn = Navnet på den nye fil som skal gemmes, efter den er resizet.
$hoejde_eller_bredde = Nye Højde og bredde på billedet.
$kvalitet = Kvalitet på billedet, 0 = dårligst, 100 = bedst.
Avatar billede xfox Nybegynder
11. marts 2008 - 17:09 #2
Undskyld det forsinkede svar. Jeg var oppe at slås med AJAX i et andet henseende, og desværre var det mig der tabte, men din løsning virker perfekt på mit billedproblem. Tusinde tak for hjælpen :o)
Avatar billede jakobdo Ekspert
11. marts 2008 - 18:33 #3
Svar!
Avatar billede jakobdo Ekspert
11. marts 2008 - 19:07 #4
Takker for point.
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