Avatar billede aslan Nybegynder
25. september 2004 - 12:39 Der er 5 kommentarer og
1 løsning

Skalere billede ved upload?

Hvordan skalere jeg et billede ved upload? Jeg bruger følgende script til at uploade billeder med, hvordan kan jeg lave den om så jeg selv kan bestemme hvilken størrelse billeder skal skaleres til?

<?php

session_start();

$materielId = $_REQUEST['id'];
$materielType = $_REQUEST['type'];

include("../../config.php");

// ca. Kb må billedet fylde
$kb = 500;

// min. bredde og højde (minimum???)
$minw = 100;
$minh = 60;

// Det dir som der skal uploades til, med skråstreger
$galleridir = "/images/";

$path = "../../images/";

// Fuld sti til galleridir
$moveto = $_SERVER["DOCUMENT_ROOT"] . $galleridir;

// Hvor sendes man hen efter upload?
$redir = "list.php?type=$materielType";//$_SERVER["PHP_SELF"];

if (isset($_FILES["upfile"])) {

// Array med fejlbeskeder sat med $_FILES["upfile"]["error"]
$arg = array(1 => "Filen er større end tilladt upload i php.ini", 2 => "Filen er større end ". round(($kb*1024)/1000) ." Kb", 3 => "Sorry, men kun en del af filen blev uploadet", 4 => "Vælg en fil til upload!");

// Array med filtyper, til brug for det endelige filnavn
$filetypes = array(1 => "gif", 2 => "jpg", 3 => "png");


    if($_FILES["upfile"]["error"] > 0) {
    $_SESSION["besked"] = strtr($_FILES["upfile"]["error"], $arg);
    header("Location:". $redir ."");
    exit();
    }

    if($_FILES["upfile"]["size"] > ($kb*1024)) {
    $_SESSION["besked"] = "Filen er for stor til upload!!!";
    header("Location:". $redir ."");
    exit();
    }

    if(false == ($str = getimagesize($_FILES["upfile"]["tmp_name"]))) {
    $_SESSION["besked"] = "Valgte fil til upload er ikke en billedfil!!!";
    header("Location:". $redir ."");
    exit();
    }

    if($str[2] > 3) {
    $_SESSION["besked"] = "Kun gif, jpg og png filer kan uploades!!!";
    header("Location:". $redir ."");
    exit();
    }

    if($str[0] < $minw) {
    $_SESSION["besked"] = "Billedet er under ". $minw ." px. i bredden!";
    header("Location:". $redir ."");
    exit();
    }

    if($str[1] < $minh) {
    $_SESSION["besked"] = "Billedet er under ". $minh ." px. i højden!";
    header("Location:". $redir ."");
    exit();
    }

    // FILNAVN UDEN FILTYPE
    $newname = time() ."_". rand(1000, 9999);

    // FILTYPEN
    $filtypen = strtr($str[2], $filetypes);

    $upname = $newname .".". $filtypen;

    if(move_uploaded_file($_FILES["upfile"]["tmp_name"], $moveto . $upname)) {
        $_SESSION["besked"] = "Billedet er blevet uploadet!";
             
                $result = mysql_query("select pictureName as oldFile from materiele where id='$materielId'")or die(mysql_error());
                if($row = mysql_fetch_array($result)){
                 
                    if($row[oldFile]!=""){
            $oldFile = $path.$row[oldFile];                   
                      chmod($oldFile, 0777);
                      unlink($oldFile);
                    }
               
                }
          $updateSQL = "update materiele set pictureName='$upname' where id = $materielId";
        mysql_query($updateSQL) or die(mysql_error());
                   
                //header("Location:list.php");
    }else{
        $_SESSION["besked"] = "Billedet kunne desværre ikke flyttes!";
    }

    header("Location:". $redir ."");
    exit();

}
?>

<html><head><title>Billede upload</title>

</head>

<body>

<a href="list.php?type=<?=$materielType?>">Tilbage</a>

<? //include("../menu.php"); ?>

<?php

if(!is_dir($moveto)) {
echo"Dir som fil skal flyttes til eksisterer ikke!!!";
}else{
?>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="<?=($kb*1024); ?>">
<input type="hidden" name="id" value="<?=$materielId; ?>">
<input type="hidden" name="type" value="<?=$materielType; ?>">
<input name="upfile" type="file" size="32"><br>
<input type="submit" value="Upload">
</form>

<?php
}
?>

</body></html>
Avatar billede acid-head Nybegynder
25. september 2004 - 14:05 #1
function resize($filnavn,$bredde=300)
{
  //Laver en billed-resource af $filnavn;
  if (filtype($filnavn)=="jpg")
    $image = imagecreatefromjpeg($filnavn);
  elseif (filtype($filnavn)=="jpeg")
    $image = imagecreatefromjpeg($filnavn);
  elseif (filtype($filnavn)=="png")
    $image = imagecreatefrompng($filnavn);

  $size = getimagesize($filnavn);  //Finder det originale billedes dimensioner.

  $division = $size[0]/$bredde; //Original billedbredde divideret med ny bredde.
  $hoejde = $size[1]/$division; //Original billedhøjde divideret med divisions-faktor

  $new = imagecreatetruecolor($bredde,$hoejde); //Opretter billed-resourcen til det resized billede

  imagecopyresampled($new,$image,0,0,0,0,$bredde,$hoejde,imagesx($image),imagesy($image)); //Her laves billedet mindre
 
  //Det nye billede gemmes!
  if (filtype($filnavn)=="jpg")
    imagejpeg($new,$filnavn);
  elseif (filtype($filnavn)=="jpeg")
    imagejpeg($new,$filnavn);
  elseif (filtype($filnavn)=="png")
    imagepng($new,$filnavn);

  imagedestroy($image); //Den originale billed-resource fjernes
  imagedestroy($new); //Kopiens billed-resource fjernes
  return 1;
}

//Denne funktion returnerer extensionen af et filnavn..
function filtype($filnavn)
{
  $filnavn_array = explode(".",$filnavn);
  $extension = strtolower($filnavn_array[count($filnavn_array)-1]);
  return $extension;
}

Sådan gør jeg.. Funktionen resize tager $filnavn og $bredde som parametre.. $bredde er som default sat til 300. Højden regnes automatisk ud, så billedet bliver skaleret korrekt..
Avatar billede iss Novice
25. september 2004 - 15:15 #2
Prøv at udskrive $size[2], der vil du se noget sjovt:D Og fordi jeg har omdøbet en gif fil til jpeg gør det ikke til en jpeg, så får man nogle grimme fejl.
Avatar billede aslan Nybegynder
25. september 2004 - 17:30 #3
Hej iss, hvad kan man gøre for at få det til at virke med gif også?
Avatar billede iss Novice
25. september 2004 - 19:41 #4
Du kan ikke gemme i GIF, men du kan læse og så skrive til f.eks PNG.
Avatar billede sukos Juniormester
26. september 2004 - 12:44 #5
Jeg har nu haft et script som også lavede gif'er!
Men da det ikke er understøttet, valgte jeg ikke at bruge det.
imagecreatefromgif()

For at bruge acid-head's forslag, skal det ind efter if(move_uploaded_file.............) {
her;
}

Men da der allerede er fundet højde/bredde m.m. kan det godt ændres en del
Avatar billede iss Novice
26. september 2004 - 12:55 #6
Ja, sukos, HAFT.... du kan ikke mere, så skal du have fat i en meget gammel GD-lib. Da det blev fjernet (og nu puttet i igen i nyeste version) pga licens mudder.
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