Avatar billede lql Nybegynder
10. april 2007 - 23:59 Der er 12 kommentarer og
1 løsning

Beskæring af billede.

Hej!

Jeg skal have brugt GDlip til at beskære et billede.


function resize_cut($image_path, $thumb_path, $image_name, $thumb_width)
{
    $src_img = imagecreatefromjpeg($image_path.$image_name);
    $origw = imagesx($src_img);
    $origh = imagesy($src_img);
    $new_w = $thumb_width;
    $diff = $origw/$new_w;
    $new_h = $new_w*2;
    $dst_img = imagecreatetruecolor($new_w,$new_h);
   
    $cut_w = ($origw/2)-($new_w/2);
   
    imagecopyresized($dst_img, $src_img, 0, 0, $cut_w, 0, $new_w, $new_h, imagesx($src_img), imagesy($src_img));

    imagejpeg($dst_img, $thumb_path.$image_name);
    return true;
}


Denne kode giver et meget sjovt resultat. Så hvis nogen gider hjælpe tak.

På forhånd tak,
Alexander Birch
Avatar billede mcardle Nybegynder
11. april 2007 - 06:29 #1
Skal du have det formindsket eller beskåret?
Avatar billede jakobdo Ekspert
11. april 2007 - 08:17 #2
Hvis det er formindske/resize, burde denne kode kunne bruges:

function resize($filename, $newfilename, $maxwidth)
{
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $scale = $maxw / $ow;
    $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 );
    return file_exists($newfilename);
}
Avatar billede lql Nybegynder
11. april 2007 - 15:40 #3
Jeg skriver i toppen at billedet skal beskæres :) (men det skal også resizes samtidig)

Altså skal et billede af ukendt størrelse beskæres i bredden afhængig af forholdene mellem dem - hvorefter det resizes.

Håber I kan hjælpe.
Avatar billede jakobdo Ekspert
11. april 2007 - 16:19 #4
Men det du godt nok skriver i toppen med beskæring giver desværre ikke helt mening.

Hvis vi siger du har et billede som er 800x900 pixels, hvordan skal det se ud efter det har været via din funktion?
Avatar billede lql Nybegynder
11. april 2007 - 16:57 #5
Skal beskære det f.eks. til et forhold

på 5:1 (bredde:højde).

800x900 > Beskæring > 800:160 > Resize > 200:40

Dette er bare eksempler, skal jo self. bare kunne indtaste ny bredde + bredde-højde-forhold
Avatar billede lql Nybegynder
11. april 2007 - 17:03 #6
Kan faktisk ikke se det store problem i min beregninger:

function resize_cut($image_path, $thumb_path, $image_name, $thumb_width)
{
    $src_img = imagecreatefromjpeg($image_path.$image_name);
    $origw = imagesx($src_img);
    $origh = imagesy($src_img);
    $new_w = $thumb_width;
    $diff = $origw/$new_w;
    $new_h = $new_w*2; // ratio 1:2
    $dst_img = imagecreatetruecolor($new_w,$new_h);
 
    $cut_w = ($origw-$new_w)/2; // Den skal skære forskellen på det gamle og det nye delt i to.
 
    imagecopyresized($dst_img, $src_img, 0, 0, $cut_w, 0, $new_w, $new_h, imagesx($src_img), imagesy($src_img));

    imagejpeg($dst_img, $thumb_path.$image_name);
    return true;
}
Avatar billede jakobdo Ekspert
11. april 2007 - 18:59 #7
Når du nu skriver at 800x900 skal beskæres til: 800x160 og derefter resizes til 200x40.
Hvordan vil du angive de forskellige ting?
Skal bredde altid beholdes ved et beskæring?
Vil en beskæring altid ske fra øvre venstre hjørne (0,0) og ned mod højre hjørne?
Avatar billede lql Nybegynder
11. april 2007 - 19:07 #8
800x900

> Beskæres til 800x160 - to lige store stykker af hver "side" i bredden

800x160

> Hele skidtet blive resized så målene passer. F.eks. hvis jeg sætter en fast værdi i bredden til 200, skal højden ændre sig derefter - det kan jo enten ske ved at gange bredden med bredde-højde-ratioen, eller ved at dividere den originale højde med forholdet mellem den originale højde og den ønskede.

200x40


Forstår I/du?
Avatar billede jakobdo Ekspert
11. april 2007 - 20:14 #9
Jeg tror jeg har fanget den.
Er det noget i denne stil du tænker: http://www.codebreaker.dk/exp/772633exp.php
Avatar billede jakobdo Ekspert
11. april 2007 - 20:17 #10
Og hvis du vil lege lidt, kan du rette tallene her i linket:

http://www.codebreaker.dk/exp/772633exp.php?w=500&h=100
Avatar billede lql Nybegynder
11. april 2007 - 20:44 #11
Det er præcis sådan.

Hvis du vil give mig noget hjælp/kode, vil det være super.

Og så er der vist 100 point på vej :p
Avatar billede jakobdo Ekspert
11. april 2007 - 20:51 #12
<?php
//http://www.eksperten.dk/spm/772633

$myDir      = '772633/'; //Husk at chmod 644 (eller hvis du er sjusket 777)
$myImage    = '800x900.jpg';
$cut_width  = (is_numeric($_GET['w']))?intval($_GET['w']):160; //Angives i pixel
$new_height = (is_numeric($_GET['h']))?intval($_GET['h']):200; //Angives i pixel

echo '<h1>Original billede</h1>';
echo '<img src="'.$myDir.$myImage.'" alt="800x900" >';
cut_image($myDir.$myImage,$myDir.'cutted_'.$myImage,$cut_width);
echo '<h1>Cutted billede</h1>';
echo '<img src="'.$myDir.'cutted_'.$myImage.'" alt="cutted" >';
resize_image($myDir.'cutted_'.$myImage,$myDir.'resized_'.$myImage,$new_height);
echo '<h1>Resized billede</h1>';
echo '<img src="'.$myDir.'resized_'.$myImage.'" alt="resized" >';

function cut_image($filename,$newfilename,$width)
{
    $srcim = imagecreatefromjpeg($filename);
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
   
    //Billedet er ikke bredt nok...
    if($ow < $width)
        return false;
   
    $dstim = imagecreatetruecolor( $width, $oh );
    $newX = ($ow-$width)/2;
    imagecopyresampled( $dstim, $srcim, 0, 0, $newX, 0, $width, $oh, $width, $oh );
    imagejpeg( $dstim, $newfilename, 85 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return file_exists($newfilename);
}

function resize_image($filename,$newfilename,$new_height)
{
    $srcim = imagecreatefromjpeg($filename);
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $scale = $new_height / $oh;
    $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 );
    return file_exists($newfilename);
}

?>
Avatar billede jakobdo Ekspert
12. april 2007 - 20:36 #13
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