14. oktober 2004 - 11:08
Der er
32 kommentarer og 2 løsninger
GD-lib truecolor
Jeg har en række billeder som jeg skal have lavet til thumbnails, men hvordan gør jeg det? Jeg har aldrig arbejdet med GD-lib før, så søger en lidt udførlig forklaring :) Kan man også selv vælge kvaliteten af billedet?
Annonceindlæg fra Pax8
14. oktober 2004 - 11:58
#1
Du kan gøre det sådan her: <?php function resize($image_name) { $image_dir = "images/"; $quality = 50; $src_dim = getimagesize($image_dir.$image_name); $dest_width = 100; $dest_height = 100; $src_img = imagecreatefromjpeg("$image_dir"."$image_name"); $dst_img = imagecreatetruecolor($dest_width,$dest_height); imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_dim[0], $src_dim[1]); imagejpeg($dst_img, $image_dir."thumbs/".$image_name, $quality); imagedestroy($src_img); imagedestroy($dst_img); } resize("1.jpg"); ?> Du kan selv ændre kvalitet, og str
14. oktober 2004 - 12:03
#2
hvordan kan man så gøre så den streamer billedet fra php? eks. mit_billede.php?id=2 både som gif og jpeg :)
14. oktober 2004 - 12:15
#3
Hvad mener du med streame billedet ? Skal den ikke gemme det på serveren, og bare vise billedet istedet ? function resize($image_name) { $image_dir = "images/"; $quality = 50; $dest_width = 100; $dest_height = 100; $var = explode(".", $file_name); $filetype = end($var); if ($filetype == 'jpg' OR $filetype == 'jpeg') { $src_dim = getimagesize($image_dir.$image_name); $src_img = imagecreatefromjpeg("$image_dir"."$image_name"); $dst_img = imagecreatetruecolor($dest_width,$dest_height); imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_dim[0], $src_dim[1]); imagejpeg($dst_img, $image_dir."thumbs/".$image_name, $quality); imagedestroy($src_img); imagedestroy($dst_img); } elseif ($filetype == 'gif') { $src_dim = getimagesize($image_dir.$image_name); $src_img = imagecreatefromgif("$image_dir"."$image_name"); $dst_img = imagecreatetruecolor($dest_width,$dest_height); imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_dim[0], $src_dim[1]); imagegif($dst_img, $image_dir."thumbs/".$image_name, $quality); imagedestroy($src_img); imagedestroy($dst_img); } }
14. oktober 2004 - 12:24
#4
den skal vise billedet :) ikke lave en masse billeder om og gemme dem
14. oktober 2004 - 12:26
#5
Har du billede navnene stående i en database ?
14. oktober 2004 - 12:28
#6
ja, på en måde, men det er bare id'et der skal identificere filen eks. 45.jpg eller 45.gif skal bare have lavet en fil så man kan gøre således: pic.php?id=45
14. oktober 2004 - 12:30
#7
Altså man ved ikke om det er jpg eller gif ? Kan der være både en 45.gif og en 45.jpg ?
14. oktober 2004 - 12:32
#8
jeps ;)
14. oktober 2004 - 12:34
#9
Hvis der både kan være en 45.gif og en 45.jpg, hvordan skal man så vide hvilken der skal vises ?
14. oktober 2004 - 12:36
#10
det ved man også... jeg har et felt i min db som angiver fil extension :) eks. jpg/gif det er bare fordi jeg vil lave en global funktion som virker alle steder jeg skal lave en resize af mine pics
14. oktober 2004 - 12:38
#11
Det vil sige at hvis man fx kalder pic.php?id=45, så skal den slå op i databasen, hvor id er 45, og få filnavn + extension ?
14. oktober 2004 - 12:59
#12
jeg kan godt lave sql, det eneste jeg skal bruge er hvordan man bruger GD-lib
14. oktober 2004 - 13:03
#13
Det har du fået. Den sidste tjekker om det er gif eller jpg
14. oktober 2004 - 14:13
#14
imagejpeg( $im, '', 85 ); Outputter en jpeg til browseren i quality 85, uden at gemme på serveren. Du skal bare huske at spytte content-type ud også.
14. oktober 2004 - 14:48
#15
jeg får denne fejl? er GD-lib ikke aktiveret eller hvad? Fatal error: Call to undefined function: imagecreatefromjpeg()
14. oktober 2004 - 14:50
#16
coderdk > vil det sige at jeg bare skal nøjes med at slette $src_img? kommer mit script ikke også til at køre hurtigere sådan her? :)
14. oktober 2004 - 14:53
#17
Uhm, det lader til at du ikke har jpeg-support i din php? Jeg forstår ikke lige dit spm? $src_img? Mit svar var et "streaming" jpeg fra php - hindu_skp's svar er bedre da du så ikke skal resize billedet hver gang ;) I hans kan du også ændre quality osv. Jeg vist bare hvordan man kan vise et billede "on-the-fly" :)
14. oktober 2004 - 15:01
#18
coderdk > det er måske ikke nogen fordel at resize "on-the-fly" hver gang et billede skal vises?? grunden til jeg ville gøre det sådan er for at spare diskplads da jeg har ret mange billeder! og hvis jeg skal have en full og thumb af hvert billede bliver det til en del mb :(
14. oktober 2004 - 15:03
#19
jeg tror slet ikke at GD er aktiveret? hvordan gør man det?
14. oktober 2004 - 15:23
#20
nu har jeg vist fået det aktiveret :) jeg er kommet frem til følgende kode, men det virker ikke... får ikke nogen fejl, men der bliver bare vist sådan et rødt kryds for at filen ikke findes?? <? header("content-type: image/jpeg"); $file = $_GET['id'].'.jpg'; $dir_file = $_SERVER["DOCUMENT_ROOT"].str_replace(basename($_SERVER["PHP_SELF"]), '', $_SERVER["PHP_SELF"]); $quality = 85; $height = 96; $src_dim = getimagesize($dir_file.$file); $src_file = imagecreatefromjpeg($dir_file.$file); $scale = ($src_dim[1] / $height); $dst_width = ($src_dim[0] / $scale); $dst_height = ($src_dim[1] / $scale); $dst_file = imagecreatetruecolor($dst_width, $dst_height); imagecopyresampled($dst_file, $src_file, 0, 0, 0, 0, $dst_width, $dst_height, $src_dim[0], $src_dim[1]); imagejpeg($dst_file, $quality); imagedestroy($src_file); ?>
14. oktober 2004 - 15:28
#21
imagejpeg($dst_file, '', $quality);
14. oktober 2004 - 15:29
#22
skal den her ikke med? imagedestroy($dst_file);
14. oktober 2004 - 16:41
#23
Jo, jo - Helst :)
14. oktober 2004 - 16:54
#24
lav et svar begge to :)
14. oktober 2004 - 16:55
#25
Værsgo :)
14. oktober 2004 - 17:32
#26
Fik du det til at virke ?
14. oktober 2004 - 20:29
#27
tak for hjælpen! hindu > jeps... jeg bruger det script jeg har stående ovenover :)
14. oktober 2004 - 20:53
#28
jeg har lige et lille tillægsspørgsmål... jeg har prøvet at bruge imagesx() og imagesy() i stedet for getimagesize(), men jeg kan ikke helt få det til at virke! den siger: imagesx(): supplied argument is not a valid Image resource <? header("content-type: image/jpeg"); $file = $_GET['id'].'.jpg'; $dir_file = $_SERVER["DOCUMENT_ROOT"].str_replace(basename($_SERVER["PHP_SELF"]), '', $_SERVER["PHP_SELF"]); $quality = 75; $height = 96; $src_width = imagesx($dir_file.$file); $src_height = imagesy($dir_file.$file); $src_file = imagecreatefromjpeg($dir_file.$file); $scale = ($src_dim[1] / $height); $dst_width = ($src_width / $scale); $dst_height = ($src_height / $scale); $dst_file = imagecreatetruecolor($dst_width, $dst_height); imagecopyresampled($dst_file, $src_file, 0, 0, 0, 0, $dst_width, $dst_height, $src_width, $src_height); imagejpeg($dst_file, '', $quality); imagedestroy($src_file); imagedestroy($dst_file); ?>
15. oktober 2004 - 00:19
#29
$src_width = imagesx($src_file); $src_height = imagesy($src_file);
15. oktober 2004 - 00:20
#30
( skal naturligvis flyttes ned under din "$src_file =..." linie )
15. oktober 2004 - 11:21
#31
hvilken syntax skal jeg så bruge hvis jeg ikke skal resize billedet, men bare have den oprindelige størrelse... tænker her på imagecopyresampled()
15. oktober 2004 - 11:24
#32
Altså samme str billede, bare med lavere kvalitet ?
15. oktober 2004 - 11:25
#33
Hvorfor vil du så kopiere billedet? Hvis du vil streame det i en anden kvalitet end den oprindelige, kan du i stedet for at resize bare lave en imagejpeg( $src_file, '', $nykvalitet );
15. oktober 2004 - 11:49
#34
Det er fordi jeg har to forskellige filer... En der laver en thumb og en der laver et full Den som laver full skal ikke lave om på størrelsen af mit billede, men bare ligge et logo ind :) Jeg ved bare ikke om det er helt optimalt at gøre som jeg har gjort? Rart nok hvis man kan spare lidt resourcer ;) Det skal lige siges at begge koder virker fint... thumb.php: ------------------ <? header("content-type: image/jpeg"); $pic = $_SERVER["DOCUMENT_ROOT"].str_replace(basename($_SERVER["PHP_SELF"]), '', $_SERVER["PHP_SELF"]).$_GET['id'].'.jpg'; $quality = 75; $height = 96; $src_pic = imagecreatefromjpeg($pic); $src_width = imagesx($src_pic); $src_height = imagesy($src_pic); $scale = ($src_height / $height); $dst_width = ($src_width / $scale); $dst_height = ($src_height / $scale); $dst_pic = imagecreatetruecolor($dst_width, $dst_height); imagecopyresampled($dst_pic, $src_pic, 0, 0, 0, 0, $dst_width, $dst_height, $src_width, $src_height); imagejpeg($dst_pic, '', $quality); imagedestroy($src_pic); imagedestroy($dst_pic); ?> full: ------------- <? header("content-type: image/jpeg"); $pic = $_SERVER["DOCUMENT_ROOT"].str_replace(basename($_SERVER["PHP_SELF"]), '', $_SERVER["PHP_SELF"]).$_GET['id'].'.jpg'; $logo = $_SERVER["DOCUMENT_ROOT"].str_replace('party/'.basename($_SERVER["PHP_SELF"]), '', $_SERVER["PHP_SELF"]).'pic_logo.png'; $quality = 100; $src_pic = imagecreatefromjpeg($pic); $src_width = imagesx($src_pic); $src_height = imagesy($src_pic); $src_logo = imagecreatefrompng($logo); $src_logo_width = imagesx($src_logo); $src_logo_height = imagesy($src_logo); $dst_pic = imagecreatetruecolor($src_width, $src_height); imagecopyresampled($dst_pic, $src_pic, 0, 0, 0, 0, $src_width, $src_height, $src_width, $src_height); $logo_x = $src_width - $src_logo_width; $logo_y = $src_height - $src_logo_height; imagecopyresampled($dst_pic, $src_logo, $logo_x, $logo_y, 0, 0, $src_width, $src_height, $src_width, $src_height); imagejpeg($dst_pic, '', $quality); imagedestroy($src_pic); imagedestroy($src_logo); imagedestroy($dst_pic); ?>
Vi tilbyder markedets bedste kurser inden for webudvikling