Afbeelding Resizen

Status
Niet open voor verdere reacties.

ErikBooy007

Terugkerende gebruiker
Lid geworden
24 mei 2007
Berichten
3.814
Ik ben bezig met een script waarbij afbeeldingen geupload kunnen worden. Deze afbeelding worden dan ook geresized.

Nu is op zich het resizen niet zo'n probleem maar ik zit met het volgende:

Ik heb de afbeeldingen nodig in een bepaalde verhouding. Het gaat om de verhouding 38 x 23. Als ik dan een brede (landscape) foto heb, dan kan ik die best een stukje uitrekken naar dit formaat. Dat is zelfs vaak nog mooier. Maar als de afbeelding hoog (portrait) is, dan wil ik eigenlijk dat de afbeelding z'n verhoudingen behoud en de rest van de afbeelding het liefst doorzichtig is, maar het mag eventueel ook zwart zijn.

Nog even een paar afbeeldingen om het idee te verduidelijken.

overzicht.png


Ik hoop dat jullie snappen wat ik bedoel.

Wat ik tot nu toe heb is:

PHP:
// The file
$filename = $_FILES['userphoto1']['tmp_name'];
// Content type
header('Content-type: image/jpeg');

// Get new dimensions
list($width, $height) = getimagesize($filename);

// Resample
$image_p = imagecreatetruecolor(114, 69);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, 114, 69, $width, $height);

$f_output = 'images/user_' . $id . '_small.jpg'; 

// Output
imagejpeg($image_p, $f_output, 100);

Dit werkt in ieder geval, het komt redelijk letterlijk van php.net . Maar daarna loop ik een beetje vast. Maar dit is prima voor de brede afbeeldingen.

Ik hoop dat jullie me kunnen helpen, want de meeste mensen zitten er denk ik niet op te wachten als hun gezicht ineens 2 keer zo breed is op de foto.:p
 
Wellicht heb je hier iets aan.
 
Hier heb ik zeker iets aan.

PHP:
function resizer($imgSrc, $maxWidth, $maxHeight) {
  // Make sure we have a resource
  $imgSrc = imagecreatefromjpeg($imgSrc);
  // Get the image width & height
  $width = imagesx($imgSrc);
  $height = imagesy($imgSrc);
  
  // Calculate the difference accoarding to the maxWidth
  $percentage = ($maxWidth/$width);
  $new_width = $width * $percentage;
  $new_height = $height * $percentage;
  
  $image_p = imagecreatetruecolor($maxWidth, $maxHeight);
  // If in portrait make sure the image is centered
  $x_dest = ($width < $height) ? ($maxHeight*-0.5) : 0;
  imagecopyresampled($image_p, $imgSrc, 0, $x_dest, 0, 0, $new_width, $new_height, $width, $height);
  return imagejpeg($image_p, null, 100);
  imagedestroy($image_p);
}

Nu begrijp ik alleen niet helemaal wat het volgende doet:

PHP:
 $x_dest = ($width < $height) ? ($maxHeight*-0.5) : 0;

Waarom doe je $maxHeight*-0.5
 
Ik zie nu dat het niet helemaal doet wat ik wil, maar ik zal kijken of ik dat zelf op kan lossen en anders laat ik het wel weten.

Hij neemt nu namelijk een deel van de foto, in de opgegeven verhouding en de rest valt weg.
 
Het is gelukt,

Ik heb nog een kleine toevoeging gedaan, zodat hij ze meteen opslaat onder de naam die ik opgeef:

PHP:
function resizer($imgSrc, $maxWidth, $maxHeight, $filename) {
  // Make sure we have a resource
  $imgSrc = imagecreatefrompng($imgSrc);
  // Get the image width & height
  $width = imagesx($imgSrc);
  $height = imagesy($imgSrc);
  
  // Calculate the difference accoarding to the maxWidth
  $percentage = ($maxHeight/$height);
  $new_width = $width * $percentage;
  $new_height = $height * $percentage;
  $x_dest = ($maxWidth - $new_width) / 2;
  
  $image_p = imagecreatetruecolor($maxWidth, $maxHeight);
  // If in portrait make sure the image is centered
  imagecopyresampled($image_p, $imgSrc, $x_dest, 0, 0, 0, $new_width, $new_height, $width, $height);
  return imagejpeg($image_p, $filename, 100);
  imagedestroy($image_p);
}

Nu doet ie het, nu nog een if-/else constructie zodat het ook goed gaat met landscape afbeeldingen maar dat mag geen probleem zijn...

Hartelijk bedankt maar weer!!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan