Avatar billede svjensen Nybegynder
24. oktober 2003 - 09:23 Der er 3 kommentarer og
1 løsning

Problem med gd resize

Jeg forsøger at uploade og resize et billede med nedenstående script.
Upload delen virker, men jeg får følgende fejlmeddelelse i f.m. resize delen:

////////////////// FEJLMEDDELELSE START //////////////////
Warning: imagesx(): supplied argument is not a valid Image resource in /customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/test2.php on line 48

Warning: imagesy(): supplied argument is not a valid Image resource in /customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/test2.php on line 49

Warning: imagecopyresized(): supplied argument is not a valid Image resource in /customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/test2.php on line 64

Warning: imagedestroy(): supplied argument is not a valid Image resource in /customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/test2.php on line 75
////////////////// FEJLMEDDELELSE SLUT //////////////////

////////////////// SCRIPT START //////////////////
<?php
$updir = $_SERVER["DOCUMENT_ROOT"]."/test/upload";  // Definer stien til dit oploadbibliotek
$aft = array('image/jpeg','image/pjpeg','image/png'); // De filtyper der kan uploades

/*
    Function checkgd()
    checks the version of gd, and returns "yes" when it's higher than 2
*/
function checkgd(){
    $gd2="";
    ob_start();
    phpinfo(8);
    $phpinfo=ob_get_contents();
    ob_end_clean();
    $phpinfo=strip_tags($phpinfo);
    $phpinfo=stristr($phpinfo,"gd version");
    $phpinfo=stristr($phpinfo,"version");
    preg_match('/\d/',$phpinfo,$gd);
    if ($gd[0]=='2'){$gd2="yes";}
    return $gd2;
}

/*
    Function ditchtn($arr,$thumbname)
    filters out thumbnails
*/
function ditchtn($arr,$thumbname){
    foreach ($arr as $item){
        if (!preg_match("/^".$thumbname."/",$item)){$tmparr[]=$item;}
    }
    return $tmparr;
}

/*
    Function createthumb($name,$filename,$new_w,$new_h)
    creates a resized image
    variables:
    $name        Original filename
    $filename    Filename of the resized image
    $new_w        width of resized image
    $new_h        height of resized image
*/   
function createthumb($name,$filename,$new_w,$new_h){
    global $gd2;
    $system=explode(".",$name);
    if (preg_match("/jpg|jpeg/",$system[1])){$src_img=imagecreatefromjpeg($name);}
    if (preg_match("/png/",$system[1])){$src_img=imagecreatefrompng($name);}
    $old_x=imageSX($src_img);
    $old_y=imageSY($src_img);
    if ($old_x > $old_y) {
        $thumb_w=$new_w;
        $thumb_h=$old_y*($new_h/$old_x);
    }
    if ($old_x < $old_y) {
        $thumb_w=$old_x*($new_w/$old_y);
        $thumb_h=$new_h;
    }
    if ($old_x == $old_y) {
        $thumb_w=$new_w;
        $thumb_h=$new_h;
    }
    if ($gd2==""){
            $dst_img=ImageCreate($thumb_w,$thumb_h);
            imagecopyresized($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);
    }else{
        $dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
        imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);
    }
    if (preg_match("/png/",$system[1])){
        imagepng($dst_img,$filename);
    } else {
        imagejpeg($dst_img,$filename);
    }
    imagedestroy($dst_img);
    imagedestroy($src_img);
}

/*
        Function directory($directory,$filters)
        reads the content of $directory, takes the files that apply to $filter
        and returns an array of the filenames.
        You can specify which files to read, for example
        $files = directory(".","jpg,gif");
                gets all jpg and gif files in this directory.
        $files = directory(".","all");
                gets all files.
*/
function directory($dir,$filters){
    $handle=opendir($dir);
    $files=array();
    if ($filters == "all"){while(($file = readdir($handle))!==false){$files[] = $file;}}
    if ($filters != "all"){
        $filters=explode(",",$filters);
        while (($file = readdir($handle))!==false) {
            for ($f=0;$f<sizeof($filters);$f++):
                $system=explode(".",$file);
                if ($system[1] == $filters[$f]){$files[] = $file;}
            endfor;
        }
    }
    closedir($handle);
    return $files;
}




?>

<html>
<head>
<title>Untitled Document</title>
<link href="scroll.css" type="text/css" rel="stylesheet">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#D0D0D0" text="#000000">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2">upload</font>
<br><br>
<?php

if (isset($_GET['mode']) && $_GET['mode'] == "upload") {


    if (empty($_REQUEST['fil'])) {
        echo "Du skal vælge en fil";
    }
    else {

        if (in_array($_FILES['fil']['type'],$aft)) {
            if (move_uploaded_file($_FILES['fil'][tmp_name], $updir."/".$_FILES['fil']['name']) or die("Filen kan ikke

uploades prøv igen!")) {
        $gd2=checkgd();
        createthumb($updir."/".$_FILES['fil']['name'],$updir."/"."tn_".$_FILES['fil']['name'],100,100);
                Echo "Alt OK<br />";
        Echo $gd2;
        Echo "<br />";
            Echo $_REQUEST['tekst'];
            }
            else {}
        }
        else {
              echo "Filtypen er ikke korrekt!";
        }   
    }

}

elseif (empty($_GET['mode'])) {
    ?>

    <form action="test2.php?mode=upload" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    <input type="file" name="fil"><br />
    <input type="text" name="tekst">
    <br /><br />
    <input type="submit" name="submit" value="Upload" >
    </form>

    <?php

}
else {
    echo "Bad guy!";
}
?>

</body>
</html>
////////////////// SCRIPT SLUT //////////////////

Der bliver gemt en fil med det rigtige thumb navn og størrelsen 100*100 pixels, men billedet er helt sort. Og der er ikke taget højde for de oprindelige dimensioner.

Er der nogen der kan hjælpe med at finde fejlen?
Avatar billede svjensen Nybegynder
24. oktober 2003 - 09:24 #1
Avatar billede svjensen Nybegynder
24. oktober 2003 - 09:55 #2
Lige lidt uddybende info:
PHP version: 4.2.2.
GD version: 1.6.2. med jpg og png support enabled
Avatar billede svjensen Nybegynder
24. oktober 2003 - 12:23 #3
Jeg er kommet problemet lidt nærmere.
$name i funktionen createthumb()indeholder:
/customers/silkeborgbasketball.dk/silkeborgbasketball.dk/httpd.www/test/upload//PICT0784.JPG

og ikke kun billedets filnavn. Hvordan kan jeg ændre det?
Avatar billede svjensen Nybegynder
24. oktober 2003 - 21:18 #4
Lukker
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