Avatar billede xeox Nybegynder
12. december 2005 - 14:05 Der er 24 kommentarer og
1 løsning

Hjælp til THMBS.

Hej eksperter.

Jeg ønsker hjælp til mit billedeupload.. Den virker fint nu, men jeg skal have den til at lave en thmb fil af billedet og ligge op sammen med det originale billede.

koden ser sådan har ud:

if (isset($_FILES['upfile'])) {
function resize( $filename, $newfilename, $maxw, $maxh )
{
    $result = false;
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $oh;
    $scale = ( $hscale < $wscale ? $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 );
    $result = imagejpeg( $dstim, $newfilename, 85 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return $result;
}
  $filetyper = array("image/gif", "text/html", "text/plain", "image/jpeg", "image/pjpeg", "image/png", "application/x-zip-compressed", "application/octet-stream"); 
  if (isset($_FILES['upfile']['name']) && $_FILES['upfile']['name'] == "") {
    echo"<table width=\"450\"  border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bordercolor=\"#FF8282\">
  <tr>
    <td width=\"20\" valign=\"middle\" bgcolor=\"f4f3f3\"><img src=\"images/warning.gif\" width=\"23\" height=\"25\"></td>
    <td width=\"430\" valign=\"middle\" bgcolor=\"#f4f3f3\" class=\"godkendt_txt\">Billedet blev ikke lagt op</td>
  </tr>
</table><br>";
  } elseif (!in_array($_FILES['upfile']['type'], $filetyper)) {
    echo "<table width=\"450\"  border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bordercolor=\"#FF8282\">
  <tr>
    <td width=\"20\" valign=\"middle\" bgcolor=\"f4f3f3\"><img src=\"images/warning.gif\" width=\"23\" height=\"25\"></td>
    <td width=\"430\" valign=\"middle\" bgcolor=\"#f4f3f3\" class=\"godkendt_txt\">Lagde du en *.png fil op, så kig bort fra denne besked.<br> Ellers: Denne fil kan ikke oplægges</td>
  </tr>
</table><br>";
  }
  if (isset($_FILES['upfile']['name']) && $_FILES['upfile']['name'] !="") {
    if(is_uploaded_file($_FILES['upfile']['tmp_name'])) {
    $sti = $row3['sti'] ."/";
      $uldir = $sti;
      $ulfile = $uldir.basename($_FILES['upfile']['name']);
      move_uploaded_file($_FILES['upfile']['tmp_name'], $ulfile);
    }
  }
}



_________

Jeg har fået en function af jakobdo som skulle kunne gøre dette, jeg mangler bare så den copyer filen over på serveren og skriver thmb_ foran navnet, og så scallere den ned i en størrelse af 110x120

Håber meget i kan hjælpe !
Avatar billede jakobdo Ekspert
12. december 2005 - 14:07 #1
Efter:
move_uploaded_file($_FILES['upfile']['tmp_name'], $ulfile);
laver du:
resize($ulfile,"thumb_".$ulfile,110,120);

Dog vil funktionen kun virke på JPEG/JPG.
Avatar billede xeox Nybegynder
12. december 2005 - 14:13 #2
er det muligt også at kunne lave så den kan på gif filer?
Avatar billede jakobdo Ekspert
12. december 2005 - 14:21 #3
Ja, så skal koden bare udvides!

Måske dette kan gøre det:

function resize( $filename, $newfilename, $maxw, $maxh )
{
    $result = false;
    $extension = end(explode(".",$filename));
    $srcim = "";
    switch($extension)
    {
        case "jpg":
        case "jpeg":
            $srcim = imagecreatefromjpeg( $filename );
            break;
        case "gif":
            $srcim = imagecreatefromgif( $filename );
            break;
        default:
            //Her skal vi helst ikke være!
            return false;
    }
       
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $oh;
    $scale = ( $hscale < $wscale ? $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 );
   
    $result = false;
       
    switch($extension)
    {
        case "jpg":
        case "jpeg":
            $result = imagejpeg( $dstim, $newfilename, 85 );
            break;
        case "gif":
            $result = imagegif( $dstim, $newfilename);
            break;
        default:
            //Her skal vi helst ikke være!
            return false;
    }
   
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return $result;
}
Avatar billede xeox Nybegynder
12. december 2005 - 14:32 #4
gulp hehe !.. ja det er så okay :op. skal der virkelig ikke andet end

resize($ulfile,"thumb_".$ulfile,110,120); til forneden? så lægger den sig selv op osv uden nogen copy function?
Avatar billede jakobdo Ekspert
12. december 2005 - 14:35 #5
jep :o)
Avatar billede xeox Nybegynder
12. december 2005 - 14:35 #6
den skriver:

Warning: imagegif(): Unable to open 'thumb_../images/galleri/gallerier/gal1/home.gif' for writing in

når jeg prøver at loade en gif fil op :o)
Avatar billede jakobdo Ekspert
12. december 2005 - 14:39 #7
Hehe!

Sådan måske:

$uldir = $sti;
$ulfile = $uldir.basename($_FILES['upfile']['name']);
$thumbFile = $uldir."thumb_".basename($_FILES['upfile']['name']);
move_uploaded_file($_FILES['upfile']['tmp_name'], $ulfile);
resize($ulfile,$thumbFile.$ulfile,110,120);
Avatar billede xeox Nybegynder
12. december 2005 - 14:49 #8
den siger fejl her nu:

        case "gif":
            $result = imagegif( $dstim, $newfilename);
            break;
        default:
            //Her skal vi helst ikke være!
            return false;

         

>>>>  $result = imagegif( $dstim, $newfilename);  <<<<


:o)
Avatar billede xeox Nybegynder
12. december 2005 - 14:49 #9
nærmere (Warning: imagegif(): Unable to open '../images/galleri/gallerier/gal1/thumb_back.gif../images/galleri/gallerier/gal1/back.gif' )
Avatar billede jakobdo Ekspert
12. december 2005 - 14:59 #10
Det skal jo være:
resize($ulfile,$thumbFile,110,120);
og ikke:
resize($ulfile,$thumbFile.$ulfile,110,120);
Avatar billede jakobdo Ekspert
12. december 2005 - 14:59 #11
Jeg sidder og sover!
Avatar billede xeox Nybegynder
12. december 2005 - 15:40 #12
yes det virker.. men lige 2 ting ;)

1: Hvorfor sætter den størrelsen til 110x83 ? er det fordi den sætter en autoscallering eller noget?

2: jeg vil gerne have den skriver thumb navnet ind i min DB i stedet for det store billede navn.. hvad skal der så stå her i stedet?

$adr = $HTTP_HOST;
$adr2 = $row3['sti'];
$sti2 = str_replace("../", "", $adr2);
$upfile2 = "http://$adr/otcms/$sti2/" . $_FILES['upfile']['name'];
Avatar billede xeox Nybegynder
12. december 2005 - 15:41 #13
rettere hvad skal der stå her:

. $_FILES['upfile']['name'];
Avatar billede jakobdo Ekspert
12. december 2005 - 15:44 #14
Kunne det være:
basename($_FILES['upfile']['name']);
Avatar billede nizo Nybegynder
12. december 2005 - 19:28 #15
Tjek hvilken version du har af GDlib, jeg havde samme problem med at lave GIF's og det er simpelthen fordi de havde disabled funktionen til at Create'e GIFs.. Det er først kommet igen i en af de nyere versioner.. Prøv at læs det spørgsmaal jeg stilte her paa eksperten ang. det: http://eksperten.dk/spm/658479
Avatar billede xeox Nybegynder
12. december 2005 - 21:50 #16
nizo - det er problem nr. 1 du svare på eller?
Avatar billede jakobdo Ekspert
12. december 2005 - 22:19 #17
1: Den laver en scalering ja!
2: Burde være: basename($_FILES['upfile']['name']);
Avatar billede xeox Nybegynder
13. december 2005 - 09:46 #18
kan den ikke laves transperant et billede ? altså, hvis jeg loader et billede op som i forvejen har en transperant baggrund, kan den så ikke stadig være transperant når den bliver lavet til en thumb?
Avatar billede jakobdo Ekspert
13. december 2005 - 09:57 #19
Jo, du kan godt lave transparent billeder, du skal kigge på: imagecolortransparent()
Avatar billede xeox Nybegynder
13. december 2005 - 10:01 #20
den skal under her:
$dstim = imagecreatetruecolor( $nw, $nh );


og hedde
$trans_color = imagecolorallocate($dstim, 255, 0, 0);
imagecolortransparent($dstim, $trans_color);


vil du ikke sige det er meget rigtigt eller misforstår jeg noget?
Avatar billede jakobdo Ekspert
13. december 2005 - 10:05 #21
Jeg har ikke rodet så meget med det, så må være dig svar skyldig!
Avatar billede xeox Nybegynder
13. december 2005 - 10:15 #22
det virkede da vist nogenlunde hehe.. men det er jo heller ikke billeder der er transperante der skal lægges op, så jeg lader det være med det som det der.. Smider du et svar, jeg har vist fået alt til at virke som det skal :D
Avatar billede jakobdo Ekspert
13. december 2005 - 10:20 #23
Det er jo smukt!
Og et svar! :o)
Avatar billede xeox Nybegynder
13. december 2005 - 10:30 #24
takker :oD

-lukket-
Avatar billede jakobdo Ekspert
13. december 2005 - 10:31 #25
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