mercoledì 14 marzo 2018

Resize image e rotate image in php prima di eseguire un update su MySql

Immaginiamo un form in php con un'immagine da uploadare su db Mysql e la vogliamo ridimensionare e ruotare prima di inserirla o aggiornarla.
Ecco un esempio di codice php per aggiornare una tabella in un database con un'immagine ridimensionata e ruotata a 90 gradi:
$pdo = Database::connect();
$idArticle=$_POST["idart"];

$query = "SELECT Image FROM Table WHERE Id=?"; 
try{
 $pdo_statement = $pdo->prepare($query);
 $pdo_statement->bindParam(1,$idArticle );
 $pdo_statement->execute();
 
 $num = $pdo_statement->rowCount();

 if ($num) {
  $row = $pdo_statement->fetch(PDO::FETCH_ASSOC);
  if($row['Image']!=null){
   $image = imagecreatefromstring($row['Image']);
   $w = imagesx($image);
   $h = imagesy($image);
   
   //resize image
   $ratio=0.5;
   $larg = $w/$ratio;
   $alt = $h/$ratio;
   $image = imagescale($image, $larg, $alt);
   
   ob_start();
   
   //rotate image
   $transp = imagecolorallocatealpha($image,0,0,0,127 );
   $image  = imagerotate($image, 90, $transp, 1);
   
   imagejpeg($image);

   $contents = ob_get_contents();
   ob_end_clean();

   imagedestroy($image);

   $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
   $sql = "UPDATE Table set Image=? WHERE Id=?";
   $pdo = $pdo->prepare($sql);
   $pdo->bindParam(1, $contents, PDO::PARAM_LOB);
   $pdo->bindParam(2, $idArticle);

   $pdo->execute();
   
   echo " img src='data:image/jpeg;base64,".base64_encode($contents)."' / ";
  }
 }else{
  return null;
 }
}catch(PDOException $e) 
{
 echo $e->getMessage();
}

Database::disconnect();