Avatar billede dstjulle Nybegynder
02. oktober 2008 - 20:24 Der er 20 kommentarer og
1 løsning

problemer med resize i upload

hej

je ghar været ved at lave et script som uploder et billede og det virker men nu skal jeg have sat en resize på og får fejl

script:

<?php


session_start();
// forbinde til DB
include"../inc/config.inc.php";

$uploadDir = 'profil/'; //Bibliotek hvor filer uploades til - husk chmod 777
$allowedFileTypes = array('jpg','gif','png'); //Hvilke filer vil vi acceptere bliver uploadet?

//Er der trykket på Upload file knappen?
if(isset($_POST['upload']))
        { 
            //Har vi en fil? 
            //echo ' filern bliver nu uploadet';
            if(is_uploaded_file($_FILES['myFile']['tmp_name'])) 
                {
                    echo ' filern bliver nu uploadet';
                    //Filendelse   
                    $extension = strtolower(pathinfo($_FILES['myFile']['name'],PATHINFO_EXTENSION));
       
                    //Er filen en af de filer vi gerne vil have?   
                    if(in_array($extension,$allowedFileTypes))    {

                    //Vi flytter filen fra tmp til vores UPLOADDIR     
                    if(move_uploaded_file($_FILES['myFile']['tmp_name'],$uploadDir . basename($_FILES['myFile']['name'])))     
                    {        echo 'File ('.basename($_FILES['myFile']['name']).') uploaded succesfully'; 
                    // laver en variabel
                    $pic = $_FILES['myFile']['name'];
                   
                    list($bredde, $hojde) = getimagesize($pic); //Find højden og bredden på det billede jeg vil resize 
                    $forhold = $hojde/$bredde; //Hvor stor er højden i forhold til bredden? 
                   
                //Find den nye højde og bredde 
                $bredde_ny = 200; 
                $hojde_ny = round($bredde_ny*$forhold);
               
                //Load/opret billeder
                $source = imagecreatefromjpeg($uploadDir); 
                $destination = imagecreate($bredde_ny, $hojde_ny);

                //Resize
                imagecopyresized($destination, $source, 0, 0, 0, 0, $bredde_ny, $hojde_ny, $bredde, $hojde);

                //Gem
                imagejpeg($destination, "nyfil_resized.jpg");


                    //liger det ind i DB
                    mysql_query("UPDATE users SET
                               
                            pic = '$pic'
               
                        where id = '".$_SESSION['id']."' LIMIT 1") or die(mysql_error()); // Opdatere Alle oplysningerne
       
                }
                else
                {        echo 'Fejl - det var ikke muligt at uploade filen: '.basename($_FILES['myFile']['name']).'';      }
        }   
        else
        {      echo 'Frokert fil type, De eneste filer det er tilatte er: ('.implode(',',$allowedFileTypes).')';    }
                }
        //Er der trykket på delete file knappen?
        }
if(isset($_POST['del']))
    {//Har vi en fil? 
            echo ' filern bliver nu slette';

            mysql_query("UPDATE users SET
                               
                            pic = 'NPA.jpg'
               
                        where id = '".$_SESSION['id']."' LIMIT 1") or die(mysql_error()); // Opdatere Alle oplysningerne
       
}

echo '<form action="?side=up-pic" method="post" enctype="multipart/form-data">';
echo 'File ('.implode(',',$allowedFileTypes).'): <input type="file" name="myFile"><br />';
echo '<input type="submit" name="upload" value="Upload filen">';
echo '</form>';
echo '<form action="?side=up-pic"  method="post"  name="del">';
echo '<input type="submit" name="del" value="Slet billede">';
echo '</form>';
?>

jeg vil også høre om der er nogle der kan hjælp mig man at få et timestampe sat som navn på det billede som gemes !
Avatar billede jakobdo Ekspert
02. oktober 2008 - 21:54 #1
Her angiver du navnet på filen:
"nyfil_resized.jpg"
Det kan du vel bare omdøbe til:

time() . '.jpg'

Og hvis du ellers har lyst, kan du også tage et kig på min artikel: http://www.eksperten.dk/artikler/1200
Avatar billede dstjulle Nybegynder
03. oktober 2008 - 07:52 #2
ja det var en godt ide men kan du også hjælp mig list med stien til hvor jeg skal resize billedet fra ( der er nogle fejl i den del af scipet ) det er disse fejl jeg snakker om

Warning: getimagesize(25.jpg) [function.getimagesize]: failed to open stream: No such file or directory in /volume1/web/test/CMS-1.0/bruger/up-pic.php on line 31

Warning: Division by zero in /volume1/web/test/CMS-1.0/bruger/up-pic.php on line 32

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /volume1/web/test/CMS-1.0/bruger/up-pic.php on line 39

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'profil/' is not a valid JPEG file in /volume1/web/test/CMS-1.0/bruger/up-pic.php on line 39

Warning: imagecreate() [function.imagecreate]: Invalid image dimensions in /volume1/web/test/CMS-1.0/bruger/up-pic.php on line 40

Warning: imagecopyresized(): supplied argument is not a valid Image resource in /volume1/web/test/CMS-1.0/bruger/up-pic.php on line 43

Warning: imagejpeg(): supplied argument is not a valid Image resource in /volume1/web/test/CMS-1.0/bruger/up-pic.php on line 46
Avatar billede jakobdo Ekspert
03. oktober 2008 - 08:08 #3
Ret $pic = ....
til:
$pic = $uploadDir . basename($_FILES['myFile']['name']);
Avatar billede dstjulle Nybegynder
03. oktober 2008 - 09:02 #4
får den har nu

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /volume1/web/test/CMS-1.0/bruger/up-pic.php on line 39

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'profil/' is not a valid JPEG file in /volume1/web/test/CMS-1.0/bruger/up-pic.php on line 39

Warning: imagecopyresized(): supplied argument is not a valid Image resource in /volume1/web/test/CMS-1.0/bruger/up-pic.php on line 43
:-) så det er ved at hjælp
Avatar billede dstjulle Nybegynder
03. oktober 2008 - 09:10 #5
har været ved at kikek lige på det link du sendet og jeg tro jeg vil prøve og se om jeg kan få det in i mit script for så kan jeg bruge alle 3 billed typer :-) men jeg er ikek helt sikker på hvordan jeg lige gør det da der ikek rigtig er nogel beskrivelse af hvad der sker kan du hjælp lidt hvis det skulle gå galt ?
Avatar billede jakobdo Ekspert
03. oktober 2008 - 09:17 #6
Jeg skal prøve at hjælpe.
Men det burde være nogenlunde lige til at gå til. :o)
Avatar billede dstjulle Nybegynder
03. oktober 2008 - 09:29 #7
jeg har fået det sat ind men får fejl :-(

skal du se hvad jeg har gjort ?
Avatar billede dstjulle Nybegynder
03. oktober 2008 - 09:33 #8
har lavet det her :

<?php

session_start();
// forbinde til DB
include"../inc/config.inc.php";

//SETTINGS
$uploadDir        = 'profil/'; //Bibliotek, hvor filer uploades til - husk chmod 777
$allowedFileTypes = array('jpg','gif','png'); //Hvilke filer vil vi acceptere bliver uploadet?
//THUMBS SETTINGS
$thumbDir        = 'profil/thumbs/'; //Bibliotek, hvor thumbs gemmes - husk chmod 777
$thumbPrefix      = 'thumb_';  //Hvad skal tilføjes til originalt filnavn?
$thumbHeight      = 250;      //Thumb højde$thumbWidth      = 800;     
//Thumb bredde
$thumbQuality    = 85;        //Kvalitet af thumb, kan være fra 0 - dårligt til 100 - bedst
//Funktioner som bruges:
function getExtension($filename){
    return strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
    }
function resize( $filename, $newfilename, $maxw, $maxh, $quality=85 )
{
  $extension = getExtension($filename);
  switch($extension)  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
        $srcim = imagecreatefromjpeg( $filename );
        break;
    case 'gif':
        $srcim = imagecreatefromgif( $filename );
        break;
    case 'png':
        $srcim = imagecreatefrompng( $filename );
        break;
    default:
    return false;
}
  $ow = imagesx( $srcim );
  $oh = imagesy( $srcim );
  $wscale = $maxw / $ow;
  $hscale = $maxh / $oh;
  $scale = min( $hscale, $wscale );
  $nw = round( $ow * $scale, 0 );
  $nh = round( $oh * $scale, 0 );
  $dstim = imagecreatetruecolor( $nw, $nh );
  imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
  switch($extension)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
        imagejpeg( $dstim, $newfilename, $quality );
        break;
    case 'gif':
        imagegif( $dstim, $newfilename );
        break;
    case 'png':
        $png_q = floor( abs( $quality / 10 - 9.9 ) );
        imagepng( $dstim, $newfilename, $png_q );
        break;
    default:
        return false;
}
imagedestroy( $dstim );
imagedestroy( $srcim );
return file_exists($newfilename);
}
//Er der trykket på Upload file knappen?
if(isset($_POST['myUpload']))
{
    //Har vi en fil? 
    if(is_uploaded_file($_FILES['myFile']['tmp_name']))
    { 
    //Filendelse   
    $extension = getExtension($_FILES['myFile']['name']);
    //Er filen en af de filer vi gerne vil have?   
    if(in_array($extension,$allowedFileTypes))
    {
    //Vi flytter filen fra tmp til vores UPLOADDIR
    if(move_uploaded_file($_FILES['myFile']['tmp_name'],$uploadDir . basename($_FILES['myFile']['name'])))
    {
    if(resize($uploadDir . basename($_FILES['myFile']['name']), $thumbDir . $thumbPrefix . basename($_FILES['myFile']['name']), $thumbWidth, $thumbHeight, $thumbQuality))
    {
    echo '<h3 style="color:green;">File ('.basename($_FILES['myFile']['name']).') uploaded and resized succesfully</h3>';
    }
    else
    {
    echo '<h3 style="color:red;">File ('.basename($_FILES['myFile']['name']).') uploaded succesfully, but resize failed</h3>';
    }
    }
    else
    {
    echo '<h3 style="color:red;">Error - unable to upload file: '.basename($_FILES['myFile']['name']).'</h3>';
    }
    }
    else
    {
    echo '<h3 style="color:red;">Wrong filetype, allowed filetypes are: ('.implode(',',$allowedFileTypes).')</h3>';
    }
    }
    else
    {
    echo '<h3 style="color:red;">No file selected<h3>';
    }
    }
    //Vores form
    echo '<form action="?side=up-pic" method="post" enctype="multipart/form-data">';
    echo 'File ('.implode(',',$allowedFileTypes).'): <input type="file" name="myFile"><br />';
    echo '<input type="submit" name="myUpload" value="Upload file">';
    echo '</form>';
?>

fejl er :
Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /volume1/web/test/CMS-1.0/bruger/up-pic.php on line 46

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /volume1/web/test/CMS-1.0/bruger/up-pic.php on line 47

Warning: imagejpeg(): supplied argument is not a valid Image resource in /volume1/web/test/CMS-1.0/bruger/up-pic.php on line 53

Warning: imagedestroy(): supplied argument is not a valid Image resource in /volume1/web/test/CMS-1.0/bruger/up-pic.php on line 65
Avatar billede jakobdo Ekspert
03. oktober 2008 - 09:36 #9
Det virker godt nok underligt.
Virker gdlib overhovedet på din installation ?
Avatar billede dstjulle Nybegynder
03. oktober 2008 - 09:37 #10
det skulle den gøre :-)
Avatar billede dstjulle Nybegynder
03. oktober 2008 - 09:39 #11
Avatar billede jakobdo Ekspert
03. oktober 2008 - 09:46 #12
Prøv at test denne kode:

<?php
header ('Content-type: image/png');
$im = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream');
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5,  'A Simple Text String', $text_color);
imagepng($im);
imagedestroy($im);
?>
Avatar billede dstjulle Nybegynder
03. oktober 2008 - 09:48 #13
http://www.espersen-glasius.dk/download/test.php

virker så vide jeg kan se :-)
Avatar billede jakobdo Ekspert
03. oktober 2008 - 09:53 #14
Har fundet fejlen:

$thumbHeight      = 250;      //Thumb højde$thumbWidth      = 800;     

Den skal lige deles i 2:

$thumbHeight      = 250;      //Thumb højde
$thumbWidth      = 800;
Avatar billede dstjulle Nybegynder
03. oktober 2008 - 09:56 #15
ok jeg prøver tak ;-)
Avatar billede dstjulle Nybegynder
03. oktober 2008 - 09:58 #16
det virker så skal jeg bare have lavet så den bliver sat i DB og så lavet navnet om til at time stamp ;-)
Avatar billede jakobdo Ekspert
03. oktober 2008 - 09:59 #17
Så ret:

//Vi flytter filen fra tmp til vores UPLOADDIR
    if(move_uploaded_file($_FILES['myFile']['tmp_name'],$uploadDir . basename($_FILES['myFile']['name'])))
    {
    if(resize($uploadDir . basename($_FILES['myFile']['name']), $thumbDir . $thumbPrefix . basename($_FILES['myFile']['name']), $thumbWidth, $thumbHeight, $thumbQuality))
    {

til:

//Vi flytter filen fra tmp til vores UPLOADDIR
    if(move_uploaded_file($_FILES['myFile']['tmp_name'],$uploadDir . time() . $extension))
    {
    if(resize($uploadDir . basename($_FILES['myFile']['name']), $thumbDir . $thumbPrefix . time() . $extension, $thumbWidth, $thumbHeight, $thumbQuality))
    {
Avatar billede jakobdo Ekspert
03. oktober 2008 - 09:59 #18
Og databasen må du så lige selv klare.
Avatar billede dstjulle Nybegynder
03. oktober 2008 - 10:01 #19
det kan jeg også :-) takker for hjælpen smider du et svar ?
Avatar billede jakobdo Ekspert
03. oktober 2008 - 10:04 #20
Svar!
Avatar billede jakobdo Ekspert
03. oktober 2008 - 11:05 #21
Takker for point.
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