Avatar billede el_morten Nybegynder
08. august 2006 - 21:20 Der er 10 kommentarer og
1 løsning

Resize billede script

Hej eksperter.
Findes der et script der kan resize et billede på en webside, så det  bliver bedre end hvis man f.eks. blot skriver width = 50% i et img-tag?

Altså det er blot visningen af billedet der skal være bedre og ikke ikke kildefilen der skal resizes.
Avatar billede challenge Praktikant
08. august 2006 - 22:02 #1
Det resultat kan du kun opnå, hvis du uploader via et upload-script. Hvsi du VIL uploade via diverse uploadprogrammer, bliver du nødt til at gøre det i hånden, m. f. eks. PS.
Avatar billede el_morten Nybegynder
08. august 2006 - 22:28 #2
Hm! Det troede jeg ellers fandtes...
Avatar billede challenge Praktikant
08. august 2006 - 22:43 #3
Jo for fanden - Du kan bruge GDlib - jeg undskylder ;)
Avatar billede challenge Praktikant
08. august 2006 - 22:45 #4
men ikke ved at skrive 50% i width og height. Der skal et lidt mere kompliceret php script til.

Det er forresten gennemgået et par gange, hér på eksperten. Prøv at søge på "image resize GDlib"
Avatar billede el_morten Nybegynder
08. august 2006 - 22:56 #5
hehe.. okay ;) Jeg har prøvet at søge, men de fleste resultater er kun til uploadscripts, så har ikke fundet det jeg søgte efter..
Avatar billede coderdk Praktikant
08. august 2006 - 23:03 #6
Et eksempel: Du kalder billedet med <img src="script.php?fil=hest.jpg">

script.php vil så se ca. sådan ud:

<?php

    function resize( $filename, $newfilename, $maxw, $maxh )
    {
        $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 );
        imagejpeg( $dstim, $newfilename, 85 );
        imagedestroy( $dstim );
        imagedestroy( $srcim );
    }

  header( 'Content-Type: image/jpeg' );
  $fil = basename( ( !empty( $_GET['fil'] ) ? $_GET['fil'] : 'billede.jpg' ) );
  resize( $fil, '', 200, 200 );

?>

Det vil give et billede der er max 200x200 - hvis du vil have et der er 50% af billedets oprindelige størrelse skal du skifte resize() linjen ud med:

  list($width, $height, $type, $attr) = getimagesize( $fil );
  resize( $fil, '', round( $width / 2 ), 100000 );

:) bemærk dog, at det kræver "kræfter" af webserveren hver gang scriptet køres, men hvis du ikke har så meget plads, men masser af computerkræft, så er det en ok måde ;)
Avatar billede el_morten Nybegynder
08. august 2006 - 23:06 #7
Okay, det må jeg lige forsøge i morgen på serveren og se hvad systemadministratoren siger til det :p
Avatar billede el_morten Nybegynder
09. august 2006 - 15:13 #8
Så har jeg afprøvet scriptet. Jeg kan dog kun få det til at virke hvis billedet ligger i samme mappe som den php-fil hvor scriptet findes. Men jeg kan ikke få det til at virke hvis stien bliver <img src="script.php?fil=../data/cases/test/img2.jpg"> .
Hvordan kan det være?
Avatar billede coderdk Praktikant
09. august 2006 - 15:18 #9
På grund af basename() - Jeg anbefaler at du har dine billeder ét sted, så kan du rette:

$fil = basename( ( !empty( $_GET['fil'] ) ? $_GET['fil'] : 'billede.jpg' ) );

til:

$fil = "../data/cases/test/" . basename( ( !empty( $_GET['fil'] ) ? $_GET['fil'] : 'billede.jpg' ) );

Det gør sikkerheden lidt bedre ;)
Avatar billede el_morten Nybegynder
09. august 2006 - 15:33 #10
Ahaa! Det forklarer jo det hele ;) Nu virker det i hvert fald, tak coderdk.

Angående sikkerheden vil det vel stadig være sikkert hvis jeg laver:
$fil = "../data/cases/".$_GET['sti']."/" . basename( ( !empty( $_GET['fil'] ) ? $_GET['fil'] : 'billede.jpg' ) );
Eller?
Avatar billede coderdk Praktikant
09. august 2006 - 15:53 #11
Nej, men hvis du vil kunne angive stien, så prøv noget som dette:

    $default_pic = 'billede.jpg'; // Skal eksistere
    $rod = '/home/el_morten/public_html'; // Det tillades kun at referere til billeder herfra og resten af underbibliotekerne
    $fil = !empty( $_GET['fil'] ) ? $_GET['fil'] : $default_pic;
    $fil = realpath($fil);
    if ( $fil == '' || substr( $fil, 0, strlen( $rod ) ) != $rod )
    {
        $fil = realpath( $default_pic );
    }
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