Avatar billede clausberg Nybegynder
18. november 2006 - 16:33 Der er 43 kommentarer og
1 løsning

Resize image

Hej
Jeg har et script der uploader billeder - selve billedet bliver smidt i biblioteket "billeder" og stien bliver smidt i en mysql database.

SAmtidigt med at billedet uploades, vil jeg nu også have det resized... og hvis billedet, som oploades fylder fx 1mb så skal det efter resize fylde væsentligt mindre. Kan det lade sig gøre?
Avatar billede coderdk Praktikant
18. november 2006 - 17:29 #1
http://php.coder.dk/resizeimg.php <- Kun til jpg, men rimeligt nemt at lave mere generisk
Avatar billede clausberg Nybegynder
18. november 2006 - 17:44 #2
Tak.

Jeg kender ikke så meget til resize området, så jeg er egentlig ikke klar over hvad jeg søger. Det er vel noget i retningen af det du finder her: http://www.ide.dk/sw7635.asp

Hvis du klikker på en sofa, så får du et stort billede af en sofa. Der er sådan en funktion jeg leder efter.

Da det er brugerne der oploader billeder, så kan jeg ikke bestemme størrelsen på disse... og der er derfor jeg tænker at de skal resizes...
Avatar billede mcardle Nybegynder
18. november 2006 - 19:56 #3
clausberg > Da det er brugerne der oploader billeder, så kan jeg ikke bestemme størrelsen på disse... og der er derfor jeg tænker at de skal resizes...


Du kan faktisk godt bestemme, eftersom du kan sætte nogle kriterier f. eks.:

list($width, $height, $type, $attr) = getimagesize($_FILES["file"]["tmp_name"]);

if(($width > 150)&&($width < 800)&&($height > 150)&&($height < 800)){
  upload billede
}
else{
  upload ikke billede
}
Avatar billede clausberg Nybegynder
18. november 2006 - 21:11 #4
mcardle-->> aha :-)

som sagt er jeg ikke klar over hvordan jeg laver funktionen smartest.
Det jeg gerne vil have er som sagt: http://www.ide.dk/sw7635.asp - klik på en vilkårlig sofa, og man ser et stor billede.

Dvs. det billede, brugeren uploader, skal vises som et lille billede, men ved klik på det, skal man se et lidt større billede.

Vil det sige, at det er thumbnail billedet man ser, og som man klikker på for at se det lidt større billede.
Avatar billede mcardle Nybegynder
19. november 2006 - 04:56 #5
Brugeren Roenving har lavet et javascript til den funktion. Den er rigtig nice, tusind tak Roenving.

http://roenving.users.whitehat.dk/
Avatar billede mcardle Nybegynder
19. november 2006 - 04:57 #6
Den første - resize til billede
Avatar billede clausberg Nybegynder
25. november 2006 - 15:05 #7
Det er desværre ikke så noget jeg er på udkig efter.

mcardle>>> den funktion du har lavet ovenfor... der hvor du sætter nogle begrænsninger på størrelsen, hvis den skaluploades. Det samme kan vel laves med størrelsen på billedet. Hvad nu hvis jeg vil begrænse brugerne til kun at uploade billeder der er under 1mb?
Avatar billede mcardle Nybegynder
25. november 2006 - 19:01 #8
Så skriver du bare:

if($_FILES["name"]["size"] < 1024000){
  upload fil
}
else{
  echo 'Din fil er for stor';
}
Avatar billede clausberg Nybegynder
29. november 2006 - 18:20 #9
Tak for hjælpen - smid et svar :-)
Avatar billede clausberg Nybegynder
29. november 2006 - 18:30 #10
Ups... jeg har lige forsøgt at sætte dit  ovennævte script ind, men den melder fejl i
linie: if($_FILES['name']['size'] < 1024000){
Avatar billede coderdk Praktikant
29. november 2006 - 18:30 #11
Du får et af mig, hvis ikke du kunne bruge mit afviser du bare :)
Avatar billede coderdk Praktikant
29. november 2006 - 19:40 #12
Du kalder den vist "file", så:

if($_FILES['file']['size'] < 1024000){

jeg vil i øvrigt anbefale at du omdøber feltet... name og file er ikke gode navne (reserverede), kald den evt. userfile, og ret koden :)
Avatar billede mcardle Nybegynder
30. november 2006 - 02:06 #13
Ja selvfølgelig:

if($_FILES['file']['size'] < 1024000){
  upload fil
}
else{
  echo 'Din fil er for stor';
}

Sorry, skrivefejl.
Avatar billede clausberg Nybegynder
04. december 2006 - 21:21 #14
mcardle>>>>
Jeg har forsøgt mig frem med placeringen af scriptet... hvor skal jeg sætte det?

Og "file"... hvad referer det til?
Avatar billede mcardle Nybegynder
05. december 2006 - 08:29 #15
file refererer til name i dit input <input type="file" name="file" />... Bare smid det i body'en.

Hvis du lige poster scriptet, så skal jeg nok lige smide det sammen... 8o)
Avatar billede coderdk Praktikant
05. december 2006 - 10:42 #16
Og som jeg skriver, så lad være med at kalde den file, men f.eks. userfile:

<input type="file" name="userfile">
Avatar billede mcardle Nybegynder
05. december 2006 - 10:46 #17
Præcis...
Avatar billede clausberg Nybegynder
09. december 2006 - 22:08 #18
Her er scriptet:

<?php
require('connect.php');

$allowedFiles = array('jpg');
$curDir      = getcwd();
$uploadDir    = '/upload/';
$output      = '<div id="centerDiv">';

if(isset($_POST['upload']) && $_FILES['myFile']['size'] > 0)
{
    $ext = strtolower(end(explode('.',$_FILES['myFile']['name'])));
    if(in_array($ext,$allowedFiles))
    {
        $design  = mysql_real_escape_string(strip_tags($_POST['mydesign']));
        $email  = mysql_real_escape_string(strip_tags($_POST['email']));
        $kategori  = mysql_real_escape_string(strip_tags($_POST['requiredmykategori']));
        $header  = mysql_real_escape_string(strip_tags($_POST['requiredgeorge']));
        $pris  = mysql_real_escape_string(strip_tags($_POST['requiredmypris']));
        $comment = mysql_real_escape_string(strip_tags($_POST['requiredjohn']));
        $file = md5(uniqid(rand(), true)) . '.jpg';

        if(move_uploaded_file($_FILES['myFile']['tmp_name'], $curDir . $uploadDir . $file))
        {
            mysql_query("INSERT INTO tbl_716418(filename,design,email,kategori,header,pris,comment,added) VALUES('".$file."','".$session->username."','".$email."','".$kategori."','".$header."','".$pris."','".$comment."',NOW())") or die(mysql_error());
            $output .= 'Filen er uploadet<hr />';
     
         
            // THUMBNAIL BLIVER LAVET HER:
            $thumbnailDir = '/thumbnails/';
            make_thumbnail(
              $curDir . $uploadDir . $file,
              $curDir . $thumbnailDir,
              0.4
            );
        }
    }
}

function make_thumbnail($filename, $thumbs_dir, $percent = 0.4)
{
  // her der får du fat i højde og bredde af billedet og skalerer disse værdier:
  list($width, $height) = getimagesize($filename);
  $newwidth = $width * $percent;
  $newheight = $height * $percent;

  $thumb = imagecreatetruecolor($newwidth, $newheight);
  $source = imagecreatefromjpeg($filename);

  imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

  // Her gemmes thumbnail billedet:
  imagejpeg($thumb, $thumbs_dir.'thumb_'.basename($filename));
}
?>


    </td>
    <td width="300">Dit produkt er nu uploaded til vores database<br/><br/><a href="b-insert2.php">Klik her for at uploade flere produkter</a><br /><br /><a href="index.php">... eller klik her for at gå til forsiden</a></td>
    </tr>
</table>
Avatar billede clausberg Nybegynder
13. december 2006 - 21:48 #19
Er der en af jer, der har et bud. Jeg kan ikke rigtig få knækket den?
Avatar billede coderdk Praktikant
13. december 2006 - 21:50 #20
Knækket hvad? Du postede bare koden, uden at skrive hvad fejlen var ;)
Avatar billede mcardle Nybegynder
14. december 2006 - 01:09 #21
Prøv:

mysql_query("INSERT INTO tbl_716418(filename,design,email,kategori,header,pris,comment,added)
        VALUES('$file','".$_SESSION->username."','$email','$kategori','$header','$pris','$comment',NOW())") or die(mysql_error());


Ved ikke om det er det, men prøv engang... :o)
Avatar billede clausberg Nybegynder
14. december 2006 - 15:39 #22
Hæ hæ hæ... ja, det kunne da godt være jeg skulle undersrege hvad problemet er: jeg kan ikke få placeret følgende script det rigtige sted i det script jeg ovenfor har postet:
if($_FILES['file']['size'] < 1024000){
  upload fil
}
else{
  echo 'Din fil er for stor';
}
Avatar billede mcardle Nybegynder
14. december 2006 - 19:07 #23
<?php
require('connect.php');

$allowedFiles = array('jpg');
$curDir      = getcwd();
$uploadDir    = '/upload/';
$output      = '<div id="centerDiv">';

if($_FILES['file']['size'] < 1024000){
if(isset($_POST['upload']) && $_FILES['myFile']['size'] > 0)
{
    $ext = strtolower(end(explode('.',$_FILES['myFile']['name'])));
    if(in_array($ext,$allowedFiles))
    {
        $design  = mysql_real_escape_string(strip_tags($_POST['mydesign']));
        $email  = mysql_real_escape_string(strip_tags($_POST['email']));
        $kategori  = mysql_real_escape_string(strip_tags($_POST['requiredmykategori']));
        $header  = mysql_real_escape_string(strip_tags($_POST['requiredgeorge']));
        $pris  = mysql_real_escape_string(strip_tags($_POST['requiredmypris']));
        $comment = mysql_real_escape_string(strip_tags($_POST['requiredjohn']));
        $file = md5(uniqid(rand(), true)) . '.jpg';

        if(move_uploaded_file($_FILES['myFile']['tmp_name'], $curDir . $uploadDir . $file))
        {
            mysql_query("INSERT INTO tbl_716418(filename,design,email,kategori,header,pris,comment,added) VALUES('".$file."','".$session->username."','".$email."','".$kategori."','".$header."','".$pris."','".$comment."',NOW())") or die(mysql_error());
            $output .= 'Filen er uploadet<hr />';
     
         
            // THUMBNAIL BLIVER LAVET HER:
            $thumbnailDir = '/thumbnails/';
            make_thumbnail(
              $curDir . $uploadDir . $file,
              $curDir . $thumbnailDir,
              0.4
            );
        }
    }
}
}
else{
  echo 'Din fil er for stor';
}
function make_thumbnail($filename, $thumbs_dir, $percent = 0.4)
{
  // her der får du fat i højde og bredde af billedet og skalerer disse værdier:
  list($width, $height) = getimagesize($filename);
  $newwidth = $width * $percent;
  $newheight = $height * $percent;

  $thumb = imagecreatetruecolor($newwidth, $newheight);
  $source = imagecreatefromjpeg($filename);

  imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

  // Her gemmes thumbnail billedet:
  imagejpeg($thumb, $thumbs_dir.'thumb_'.basename($filename));
}
?>


    </td>
    <td width="300">Dit produkt er nu uploaded til vores database<br/><br/><a href="b-insert2.php">Klik her for at uploade flere produkter</a><br /><br /><a href="index.php">... eller klik her for at gå til forsiden</a></td>
    </tr>
</table>
Avatar billede coderdk Praktikant
14. december 2006 - 21:15 #24
Prøv:

<?php
require('connect.php');

$allowedFiles = array('jpg');
$curDir      = getcwd();
$uploadDir    = '/upload/';
$output      = '<div id="centerDiv">';

if(isset($_POST['upload']) && $_FILES['myFile']['size'] > 0)
{
    $ext = strtolower(end(explode('.',$_FILES['myFile']['name'])));
    if(in_array($ext,$allowedFiles))
    {
        if($_FILES['myFile']['size'] < 1024000){
            $design  = mysql_real_escape_string(strip_tags($_POST['mydesign']));
            $email  = mysql_real_escape_string(strip_tags($_POST['email']));
            $kategori  = mysql_real_escape_string(strip_tags($_POST['requiredmykategori']));
            $header  = mysql_real_escape_string(strip_tags($_POST['requiredgeorge']));
            $pris  = mysql_real_escape_string(strip_tags($_POST['requiredmypris']));
            $comment = mysql_real_escape_string(strip_tags($_POST['requiredjohn']));
            $file = md5(uniqid(rand(), true)) . '.jpg';
   
            if(move_uploaded_file($_FILES['myFile']['tmp_name'], $curDir . $uploadDir . $file))
            {
                mysql_query("INSERT INTO tbl_716418(filename,design,email,kategori,header,pris,comment,added) VALUES('".$file."','".$session->username."','".$email."','".$kategori."','".$header."','".$pris."','".$comment."',NOW())") or die(mysql_error());
                $output .= 'Filen er uploadet<hr />';
       
           
                // THUMBNAIL BLIVER LAVET HER:
                $thumbnailDir = '/thumbnails/';
                make_thumbnail(
                  $curDir . $uploadDir . $file,
                  $curDir . $thumbnailDir,
                  0.4
                );
            }
        else{
          echo 'Din fil er for stor';
        }
    }
}
}
function make_thumbnail($filename, $thumbs_dir, $percent = 0.4)
{
  // her der får du fat i højde og bredde af billedet og skalerer disse værdier:
  list($width, $height) = getimagesize($filename);
  $newwidth = $width * $percent;
  $newheight = $height * $percent;

  $thumb = imagecreatetruecolor($newwidth, $newheight);
  $source = imagecreatefromjpeg($filename);

  imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

  // Her gemmes thumbnail billedet:
  imagejpeg($thumb, $thumbs_dir.'thumb_'.basename($filename));
}
?>
Avatar billede coderdk Praktikant
14. december 2006 - 21:17 #25
Hov så ikke lige mcardle havde svaret ;P
Avatar billede clausberg Nybegynder
30. december 2006 - 12:29 #26
Mcardle->> Dit script virker sådan set ok... på nær, at selve thumb billedet vises ikke - jeg kan se, at det slet ikke bliver genereret. I stedet vises det lille ikon for mangledne billede (det med et kryds over). Hvis man klikker på ikonet, så kan man se det store billede - hvilket jo er meningen.

Men hvorfor laves der ikke et thumbnail billede?
Avatar billede mcardle Nybegynder
31. december 2006 - 01:45 #27
Prøv at lav:
$thumbnailDir = '/thumbnails/';

om til:
$thumbnailDir = '/thumbnails';

og evt.:
$uploadDir    = '/upload/';

om til:
$uploadDir    = '/upload';
Avatar billede mcardle Nybegynder
31. december 2006 - 01:46 #28
Jeg mener ikke den er så god til at finde ud af "/"
Avatar billede mcardle Nybegynder
31. december 2006 - 02:52 #29
Prøv at kør dette script:

if (function_exists("imagegif")) {
  header("Content-type: image/gif");
  imagegif($im);
} elseif (function_exists("imagejpeg")) {
  header("Content-type: image/jpeg");
  imagejpeg($im, "", 0.5);
} elseif (function_exists("imagepng")) {
  header("Content-type: image/png");
  imagepng($im);
} elseif (function_exists("imagewbmp")) {
  header("Content-type: image/vnd.wap.wbmp");
  imagewbmp($im);
} else {
  die("No image support in this PHP server");
}

Det er ikke sikkert der er installeret support for image på serveren...
Avatar billede clausberg Nybegynder
31. december 2006 - 15:47 #30
Æv... virker ikke.
Mit thumbnail billede skal smides ned i biblioteket der hedder: thumbnails. Det bliver det ikke.

Originalbilledet bliver heller ikke smidt ned i biblioteket "upload"
Avatar billede mcardle Nybegynder
03. januar 2007 - 09:58 #31
Du må undskylde, hvis der går lidt lang tid mellem mine svar, men jeg er ved at flytte og vi har først lige fået internet i dag...
Avatar billede mcardle Nybegynder
03. januar 2007 - 09:59 #32
Jeg skal nok lige lave et script der virker til dig... Der går nok bare lige et par dage...
Avatar billede clausberg Nybegynder
03. januar 2007 - 22:29 #33
Hey
No problemo :-) Jeg er bare glad for din hjælp ;-)
Avatar billede mcardle Nybegynder
04. januar 2007 - 21:33 #34
Må jeg lige se den form du bruger til at uploade med...?
Avatar billede mcardle Nybegynder
04. januar 2007 - 22:20 #35
<?php
/*
Hej igen...

Jeg har ikke testet det her script, men det kan du jo lige prøve... Det skulle virke...
*/

$konfiguration["upload_bibliotek"] = "upload";
$konfiguration["max_stoerrelse"] = "2048"; // I KB. altså 2048 er 2 MB
$konfiguration["filtype"] = "image/pjpeg";
$konfiguration["thumbdir"] = "upload/thumbnails";

/* Check PHP-version */
list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
  die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
}

/* Skab de "moderne" arrays hvis vi arbejder med en aeldre PHP */
if($minor < 1) {
  $_FILES = $HTTP_POST_FILES;
  $_POST = $HTTP_POST_VARS;
  $_SERVER = $HTTP_SERVER_VARS;
}

/* Hvor flytter vi fra og til */
$fra = $_FILES["upfil"]["tmp_name"];
$til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

/* Accepterer vi filens stoerrelse? */
$fil_stoerrelse = filesize($fra)/1024;
if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
  die("Desværre - filen er for stor. Jeg accepterer kun " .
      $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
      ceil($fil_stoerrelse, 1) . " kb");
}

if($_FILES["upfil"]["type"] != $konfiguration["filtype"]){
    die("Filtypen er ikke godkendt");
}

/* Saa koerer vi */
if(function_exists("move_uploaded_file")){
    $fileUploadet = move_uploaded_file($fra, $til);
}
else{
    $fileUploadet = copy($fra, $til);
}

if($fileUploadet == true){
    $design  = mysql_escape_string(strip_tags($_POST['mydesign']));
    $email  = mysql_escape_string(strip_tags($_POST['email']));
    $kategori  = mysql_escape_string(strip_tags($_POST['requiredmykategori']));
    $header  = mysql_escape_string(strip_tags($_POST['requiredgeorge']));
    $pris  = mysql_escape_string(strip_tags($_POST['requiredmypris']));
    $comment = mysql_escape_string(strip_tags($_POST['requiredjohn']));
    $file = md5(uniqid(rand(), true)) . '.jpg';
   
    $sql_status = mysql_query("INSERT INTO tbl_716418(filename,design,email,kategori,header,pris,comment,added)
            VALUES('$file','$session->username','$email','$kategori','$header','$pris','$comment',NOW())") OR die(mysql_error());
           
    // THUMBNAIL BLIVER LAVET HER:
    make_thumbnail($til,$konfiguration["thumbdir"]);
}

function make_thumbnail($filename, $thumbs_dir, $percent = 0.4){
  // her der får du fat i højde og bredde af billedet og skalerer disse værdier:
  list($width, $height) = getimagesize($filename);
  $newwidth = $width * $percent;
  $newheight = $height * $percent;

  $thumb = imagecreatetruecolor($newwidth, $newheight);
  $source = imagecreatefromjpeg($filename);

  imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

  // Her gemmes thumbnail billedet:
  return $billed_status = imagejpeg($thumb, $thumbs_dir.'thumb_'.basename($filename));
}


// Beskeder
if($fileUploadet == true){
    echo "Din fil er nu uploadet";
}

if($sql_status == true){
    echo "Din fil er nu registreret i databasen";
}

if($billed_status == true){
    echo "Der er nu oprettet et thumbnail";
}

?>

</td>
    <td width="300">Dit produkt er nu uploaded til vores database<br/><br/><a href="b-insert2.php">Klik her for at uploade flere produkter</a><br /><br /><a href="index.php">... eller klik her for at gå til forsiden</a></td>
    </tr>
</table>

//Husk at bruge method="post" i din form og set enctype="multipart/form-data"
Avatar billede mcardle Nybegynder
04. januar 2007 - 22:22 #36
Jeg har lavet mysql_real_escape_string() om til mysql_escape_string(), for jeg har haft lidt problemer med at få det til at virke, selom jeg har PHP 5.

Se om det virker, ellers må vi jo på den igen... ;o)
Avatar billede clausberg Nybegynder
09. januar 2007 - 23:18 #37
Hey
Fedt at du har kigget på det - jeg får nu fejlen: Filtypen er ikke godkendt".

Tak for din hjælp!!!
Avatar billede coderdk Praktikant
09. januar 2007 - 23:22 #38
Prøv at lave:

$konfiguration["filtype"] = "image/pjpeg";

om til

$konfiguration["filtype"] = "image/jpeg";
Avatar billede clausberg Nybegynder
13. januar 2007 - 12:59 #39
Hey
Ja, den ændring har jeg allerede prøvet, men uden resultat.

Skal det i grunden ikke hedde "filetype"???
Avatar billede mcardle Nybegynder
15. januar 2007 - 00:27 #40
Nej, det skal det ikke. Du kan godt kalde den det, men det er mig selv der har lavet variablen, så jeg må selv bestemme hvad den skal hedde. Det er ikke en forudbestemt variabel. ;o)
Avatar billede mcardle Nybegynder
15. januar 2007 - 00:33 #41
Hvad står der i dit input under name?

Husk det skal være:
<input type="file" name="upfil" />
Avatar billede mcardle Nybegynder
15. januar 2007 - 00:35 #42
Hvis det heller ikke virker, så prøv at lav en ny side, som du sender til fra din form. Skriv det her ind:

<?php

echo $_FILES["upfil"]["type"];

?>

Og se hvad der skal stå i $konfiguration["filtype"] = "image/?"
Avatar billede clausberg Nybegynder
09. marts 2007 - 07:08 #43
mcardle->>> smid et svar :-) og tak for hjælpen. (jeg har løst problemet)
Avatar billede mcardle Nybegynder
09. marts 2007 - 08:34 #44
Tak, tak.
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