sql >> Database teknologi >  >> RDS >> Mysql

Kan ikke finde fejl i upload billedkode php

Dette er en meget robust rutine, der skaber 2 billeder og store.

Det kontrollerer også de 3 billedtyper for det mindste output. Jeg er ligeglad med hvilket format billedet er, da jeg satte det på HTML-siden som base64.

Det konverterer også billederne til base64 og gemmer dem i en SQL-tabel og gemmer base64-billedet på en HTML-side.

Mens den udfører skaleringen, vises billederne til gennemsyn.

Du ser ud til at have nok viden om dette til at forstå min kode.

Jeg kan kommentere det.

$thumbWidth =60;$thumbHeight =60; $previewWidth =200;$previewHeight =150;$bigWidth =800;$bigHeight =600;if( is_uploaded_file($_FILES['ava']['tmp_name']) || !($_FILES['ava'][' fejl'] !==UPLOAD_ERR_OK)){ $save =falsk; $jspan =''; $gspan =''; $pspan =''; 

Hent billedtypen efter dens MIME-type.

Tjek derefter igen ved hjælp af imagecreatefrom

Uanset filtypenavn, MIME-type, hvis det er et billede jpg, png eller gif, vil det positivt identificere typen.

 switch(strtolower($_FILES['ava']['type'])){ case 'image/jpeg':$image =@imagecreatefromjpeg($_FILES['ava']['tmp_name'] ); if ($image !==false){$save =true;break;} case 'image/png':$image =@imagecreatefrompng($_FILES['ava']['tmp_name']); if ($image !==false){$save =true;break;} case 'image/gif':$image =@imagecreatefromgif($_FILES['ava']['tmp_name']); if ($image !==false){$save =true;break;} standard:$img =@getimagesize($_FILES['ava']['tmp_name']); switch(strtolower($img['mime'])){ case 'image/jpeg':$image =@imagecreatefromjpeg($_FILES['ava']['tmp_name']); if ($image !==false){$save =true;break;} case 'image/png':$image =@imagecreatefrompng($_FILES['ava']['tmp_name']); if ($image !==false){$save =true;break;} case 'image/gif':$image =@imagecreatefromgif($_FILES['ava']['tmp_name']); if ($image !==false){$save =true;break;} standard:$filename =$_FILES['ava']['name']; $ext =substr($filnavn,-3); switch(strtolower($ext)){ case 'jpg':$image =@imagecreatefromjpeg($_FILES['ava']['tmp_name']); if ($image !==false){$save =true;break;} case 'gif':$image =@imagecreatefromgif($_FILES['ava']['tmp_name']); if ($image !==false){$save =true;break;} case 'png':$image =@imagecreatefrompng($_FILES['ava']['tmp_name']); if ($image !==falsk){$save =true;break;} standard:$image =@imagecreatefromjpeg($_FILES['ava']['tmp_name']); if ($image !==false){$save =true;break;} $image =@imagecreatefrompng($_FILES['ava']['tmp_name']); if ($image !==falsk){$save =true;break;} $image =@imagecreatefromgif($_FILES['ava']['tmp_name']); if ($image !==false){$save =true;break;} } } }} 

Skaler til forhåndsvisningsstørrelsen

 if ($save ===true){ $originalWidth =imagesx($image); $originalHeight =imagesy($image); $scale =min($previewWidth/$originalWidth, $previewHeight/$originalHeight); $newWidth =ceil($scale*$originalWidth); $nyHøjde =ceil($skala*$originalHøjde); $newPic =imagecreatetruecolor($newWidth, $newHeight); imagecopyresampled($newPic, $image,0, 0, 0, 0,$newWidth, $newHeight, $originalWidth, $originalHeight); ob_start(); imagejpeg($newPic, NULL, 70); $jpg =ob_get_clean(); ob_clean(); ob_end_flush(); $jLen =strlen($jpg); ob_start(); imagepng($newPic, NULL, 9); $png =ob_get_clean(); ob_clean(); ob_end_flush(); $pLen =strlen($png); ob_start(); imagegif($nyt billede); $gif =ob_get_clean(); ob_clean(); ob_end_flush(); 

Tjek, hvilken billedtype der skaber det mindste antal bytes

 $gLen =strlen($gif); if ($gLen <$jLen){ if ($pLen <$gLen){ $raw =$png; $png =null; $type ='png'; $pspan =''; } andet{ $raw =$gif; $gif =null; $type ='gif'; $gspan =''; } } elseif($pLen <$jLen){ $raw =$png; $png =null; $type ='png'; $pspan =''; } andet{ $raw =$jpg; $jpg =null; $type ='jpg'; $jspan =''; } 

Konverter til bas64 og Gem

Jeg bruger base64-billeder i mine HTML-sider. Det eliminerer HTTP-rundtur for hvert billede.

Nej-sagerne klager over, at base64 tilføjer 30% til billedstørrelsen. Og det gør den.

Når base64 er indlejret i HTML, bliver det zgippet. Og de ekstra 30 % komprimeres af gzip til meget mindre, typisk kun et par procent.

En HTTP rundrejse varierer fra server til server, tidspunkt på dagen osv. men typisk 200 millisekunder. Transmissionstiden for base64 er normalt kun et par millisekunder.

$base64 =base64_encode($raw); $thumb1 ="\"profil "; $size ='Tommelfinger'; echo "

Billede $num $size
$jspan jpg:$jLen bytes,
$gspan gif:$gLen bytes,
$pspan png:$pLen bytes

$thumb1"; $filnavn ='thumb1.' . $type; $fp =fopen($filnavn,"w"); fwrite($fp, $raw); fclose($fp); imagedestroy($newPic); $filnavn ="thumb1_$type.html"; $fp =fopen($filnavn,"w"); fwrite($fp, $thumb1); fclose($fp); $thumb1 =mysql_escape_string($thumb1); @mysql_unbuffered_query("OPDATERING `photos` SET `thumb1`='$thumb1' WHERE `id`=$id");

Skaler til stort billede:

 $scale =min($bigWidth/$originalWidth, $bigHeight/$originalHeight); $newWidth =ceil($scale*$originalWidth); $nyHøjde =ceil($skala*$originalHøjde); $newPic =imagecreatetruecolor($newWidth, $newHeight); imagecopyresampled($newPic, $image,0, 0, 0, 0,$newWidth, $newHeight, $originalWidth, $originalHeight); ob_start(); imagejpeg($newPic, NULL, 70); $jpg =ob_get_clean(); ob_clean(); ob_end_flush(); $jLen =strlen($jpg); ob_start(); imagepng($newPic, NULL, 9); $png =ob_get_clean(); ob_clean(); ob_end_flush(); $pLen =strlen($png); ob_start(); imagegif($nyt billede); $gif =ob_get_clean(); ob_clean(); ob_end_flush(); $gLen =strlen($gif); if ($gLen <$jLen){ if ($pLen <$gLen){ $raw =$png; $png =null; $type ='png'; $pspan =''; } andet{ $raw =$gif; $gif =null; $type ='gif'; $gspan =''; } } elseif($pLen <$jLen){ $raw =$png; $png =null; $type ='png'; $pspan =''; } andet{ $raw =$jpg; $jpg =null; $type ='jpg'; $jspan =''; } $base64 =base64_encode($raw); $size ='Fuld størrelse'; $filnavn ='big1.' . $type; $big1 ="\"profilfoto "; echo "

Billede $num $size
$jspan jpg:$jLen bytes,
$gspan gif:$gLen bytes,
$pspan png:$pLen bytes

$big1"; $fp =fopen($filnavn,"w"); fwrite($fp, $raw); fclose($fp); imagedestroy($newPic); $filnavn ="big1_$type.html"; $fp =fopen($filnavn,"w"); fwrite($fp, $big1); fclose($fp); $big1 =mysql_escape_string($big1); @mysql_unbuffered_query("OPDATERING `photos` SET `big1`='$big1' WHERE `id`=$id");



  1. CodeIgniter MSSQL-forbindelse

  2. mySQL Stored Procedure til at opdele strenge med afgrænser

  3. Sådan fungerer FORMAT()-funktionen i SQL Server (T-SQL)

  4. MYSQLI forberedt sætning bind_param typer virker ikke