Beste mensen,

Ik gebruik al jarenlang een script om via een formulier upload een image naar de server te sturen.
Wat ik mis is een CROP functie. Ik zou graag een vaste vierkant van 450 px x 450 px willen hanteren. Soms zijn foto's landscape en als ik dat nu upload dan propt hij met dit script de afbeelding in elkaar.
Kan en wil iemand mij helpen om in mijn huidige script iets te wijzigen of toe te voegen waarmee ik van een landscape afbeelding een vierkant kant uitsnijden? Ik weet dat er tools als croppie bestaat, maar dit vind ik te omslachtig.

$streepje = "-";
$extentie = ".jpg";
$cijfer1 = mt_rand(1, 9);

$newfilename = $Datum . $streepje . $cijfer1 . $extentie;

$change="";
$abc="";

define ("MAX_SIZE","450");
function getExtension($str) {
         $i = strrpos($str,".");
         if (!$i) { return ""; }
         $l = strlen($str) - $i;
         $ext = substr($str,$i+1,$l);
         return $ext;
 }

$errors=0;
  
if($_SERVER["REQUEST_METHOD"] == "POST")
   {
      $image = $_FILES['bestand']['name'];
      $uploadedfile = $_FILES['bestand']['tmp_name'];
     
if ($image) 
   {
      $filename = stripslashes($_FILES['bestand']['name']);
      $extension = getExtension($filename);
      $extension = strtolower($extension);
		
if (($extension != "jpg") && ($extension != "jpeg")) 
   {
      $change='<div class="msgdiv">Gebruik ENKEL *.jpg of *.jpeg bestanden!</div> ';
      $errors=1;
   }
   else
   {

$uploadedfile = $_FILES['bestand']['tmp_name'];
$src = imagecreatefromjpeg($uploadedfile);

list($width,$height)=getimagesize($uploadedfile);

$newwidth=450;
$newheight=450;
//$newheight=($height/$width)*$newwidth;
$tmp=imagecreatetruecolor($newwidth,$newheight);

imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);

$filename = $_SERVER['DOCUMENT_ROOT'] . "/img_artiesten/". $_FILES['bestand']['name'];

imagejpeg($tmp,$filename,100);

imagedestroy($tmp);
imagedestroy($src);

}
}
}

rename("$filename", $_SERVER['DOCUMENT_ROOT'] . "/img_artiesten/$newfilename");
Ik heb het werkend...!!!
<?php

$uploadedfile = $_FILES['bestand']['tmp_name'];
$img = imagecreatefromjpeg($uploadedfile);

$ini_x_size = getimagesize($uploadedfile)[0];
$ini_y_size = getimagesize($uploadedfile )[1];

//the minimum of xlength and ylength to crop.
$crop_measure = min($ini_x_size, $ini_y_size);
// Set the content-type header
//header('Content-Type: image/png');
$crop_array = array('x' =>0 , 'y' => 0, 'width' => $crop_measure, 'height'=> $crop_measure);

$crop_img = imagecrop($img, $crop_array);

$filename = $_SERVER['DOCUMENT_ROOT'] . "/img_artiesten/". $_FILES['bestand']['name'];
imagejpeg($crop_img, $filename, 100);

imagedestroy($img);
?>

Het enige waar ik nog mee zit is dat ik de afbeelding nog wil verkleinen naar 450 px.
Doe ik dit al in dit script of erna? En hoe?
Ik denk dat je beter eerst kan resizen en dan croppen.
Ik heb inmiddels een script via github gevonden en aangepast naar mijn wensen en doet nu precies wat ik graag wil.
Ik kwam erachter dat de crop functie vanuit php zoals eerder genoemd niet vanuit het centrum denkt, dus je hebt er zonder extra functies eraan toe te voegen ook niet heel veel aan.

Maar bedankt voor het intensief meedenken en vooral de hulp die ik kreeg.
Welk script is dat op Github?

Reageren