Avatar billede erik_a Novice
07. juni 2010 - 13:31 Der er 2 kommentarer og
1 løsning

Resize billede ved upload, gem i DB?

Hejsa folkens.

Søger en funktion der kan ændre størrelsen på et billede ved upload uden at ændre proportionerne og gemme den i databasen.

Lige nu har jeg meget lidt :

if (isset($binFile) && $binFile != "none") {
  $billede = addslashes(fread(fopen($binFile, "r"), filesize($binFile)));
}

og $billede smides direkte ind i min sql.

Håber i kan hjælpe

Pft. Erik
Avatar billede repox Seniormester
07. juni 2010 - 13:40 #1
Brug imagemagick.

$cmd = "convert original_billede.jpg -resize 200x nyt_billede.jpg";
exec($cmd);


Så kan du hente de binære data fra nyt_billede.jpg bagefter, lægge det i databasen og slette billederne...

Ovenstående eksempel giver billedet en bredde på 200px uanset højden.

Se flere eksempler på http://www.imagemagick.org/Usage/resize/
Avatar billede jakobdo Ekspert
07. juni 2010 - 21:44 #2
Kig på nogle af mine artikler.
Der er kode til resize.
Avatar billede erik_a Novice
17. september 2010 - 08:47 #3
Har selv fundet en komplet løsning :

Nedenstående funktion laver hele arbejdet...
function scaleImageFileToBlob($file,$width,$height) {

    $source_pic = $file;
    $max_width = $width;
    $max_height = $height;

    list($width, $height, $image_type) = getimagesize($file);

    switch ($image_type)
    {
        case 1: $src = imagecreatefromgif($file); break;
        case 2: $src = imagecreatefromjpeg($file);  break;
        case 3: $src = imagecreatefrompng($file); break;
        default: return '';  break;
    }

    $x_ratio = $max_width / $width;
    $y_ratio = $max_height / $height;

    if( ($width <= $max_width) && ($height <= $max_height) ){
        $tn_width = $width;
        $tn_height = $height;
        }elseif (($x_ratio * $height) < $max_height){
            $tn_height = ceil($x_ratio * $height);
            $tn_width = $max_width;
        }else{
            $tn_width = ceil($y_ratio * $width);
            $tn_height = $max_height;
    }

    $tmp = imagecreatetruecolor($tn_width,$tn_height);

    /* Check if this image is PNG or GIF, then set if Transparent*/
    if(($image_type == 1) OR ($image_type==3))
    {
        imagealphablending($tmp, false);
        imagesavealpha($tmp,true);
        $transparent = imagecolorallocatealpha($tmp, 255, 255, 255, 127);
        imagefilledrectangle($tmp, 0, 0, $tn_width, $tn_height, $transparent);
    }
    imagecopyresampled($tmp,$src,0,0,0,0,$tn_width, $tn_height,$width,$height);

    /*
    * imageXXX() only has two options, save as a file, or send to the browser.
    * It does not provide you the oppurtunity to manipulate the final GIF/JPG/PNG file stream
    * So I start the output buffering, use imageXXX() to output the data stream to the browser,
    * get the contents of the stream, and use clean to silently discard the buffered contents.
    */
    ob_start();

    switch ($image_type)
    {
        case 1: imagegif($tmp); break;
        case 2: imagejpeg($tmp, NULL, 70);  break; // best quality
        case 3: imagepng($tmp, NULL, 0); break; // no compression
        default: echo ''; break;
    }

    $final_image = ob_get_contents();

    ob_end_clean();

    return $final_image;
}

Kaldes således :
$image = scaleImageFileToBlob($_FILES['binFile']['tmp_name'],500,500);

$image smides så ind i blobfeltet i databasen...
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