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
Annonceindlæg fra Barco
11. april 2007 - 06:29
#1
Skal du have det formindsket eller beskåret?
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); }
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.
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?
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
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; }
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?
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?
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
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); } ?>
12. april 2007 - 20:36
#13
Takker for point.
Vi tilbyder markedets bedste kurser inden for webudvikling