FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Mycket flitig postare
|
Någon som har en färdig funktion för att göra JPEG-thumbnails i PHP?
Dvs att man har en jpeg fil någonstans på servern och förminskar den till valfri storlek och skapar en ny fil. Jag har provat massor av olika färdigskrivna scripts, men ingen som funkar bra. Antingen så blir det fel med färgerna, eller så finns det en max gräns på bilder på >800kb. Den senaste kladden av funktioner, ser ut såhär: $abc = imagecreatefromjpeg($_FILES["myfile"]["tmp_name"]); $def = imagecreate($newWidth, $newHeight); imagecopyresized($def, $abc, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); imagejpeg($def, '/home/*******/httpdocs/new_thumb.jpg', 95); ImageDestroy($abc); ImageDestroy($def); /* $im = ImageCreateFromJPEG($newWidth, $newHeight) or die("Cannot Initialize new GD image stream"); imagecopyresized ( $im, $_FILES["myfile"]["tmp_name"], 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); copy($im, PATH.$dirname."/".$filename) or die("Error: could not copy file."); */ |
|||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Nykomling
|
Kan iaf hjälpa dig med att få rätt på färgerna...
använd imagecreatetruecolor istället för imagecreate Angående storleksbegrensning har jag inte noterat någon sådan.... möjligen använda imagecopyresampled i stället för imagecopyresized sen om man alltid vill ha rätt utsende på sin omsamplade bild så kan man behöva jämnföra proportioner på bilderna (orginal mot thumbnailen man vill ha) |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Klarade millennium-buggen
|
Kod:
$ext = strtolower(substr($_FILES["filen"]["name"],-3,3)); $filename = "/home/grazzy/public_html/images/galleries" . chop($gallery[url]) . substr($_FILES["filen"]["name"],0,-3) . strtolower(substr($_FILES["filen"]["name"],-3,3)); move_uploaded_file($_FILES["filen"]["tmp_name"], $filename); $namethumb = $namn . "_thumb." . $ext; $namemedium = $namn . "_800." . $ext; $nameorginal = $namn . "_org." . $ext; `convert -scale 100x100 $filename $namethumb`; `convert -scale 800x600 $filename $namemedium`; `convert $filename $nameorginal`; `rm -f $filename`; |
||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Mycket flitig postare
|
Citat:
/Zoran |
|||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Mycket flitig postare
|
Citat:
Tack så mycket nallebjorn! @grazzy - Jag fick inte din funktion att fungera. Men jag gav inte hela min själv i det för att jag fick det att fungera med det första tipset. Dock var det ganska smart du gör med att lägga tre versioner av samma bild. Borde nog implentera något liknande själv. |
|||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Klarade millennium-buggen
|
Citat:
Har administratören confat PHP rätt och gjort inställningarna rätt så skall imagemagick fungera utmärkt i Safe_mode. |
||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Klarade millennium-buggen
|
Citat:
Såvida man inte är proffsfotograf då kanske, men det är knappast så i mitt fall ![]() |
||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Flitig postare
|
Jag använder denna fina funktion för att räkna ut proportioner och liknande vid skapande av tumnaglar.
Därmed får man en bild som är ett fast antal pixlar stor där bilden inuti kan ha sina korrekta proportioner men att bilden, layoutmässigt alltid tar upp lika stor plats. Börjar dock lacka på att GD är så dålig på att göra tumnaglar och funderar på att gå över till NetPBM eller ImageMagick Kod:
function imageresize( $bild, $maxbredd, $maxhojd, $mapp, $bakgrund) { if(!isset ($bild) || !isset($maxhojd) || !isset($maxbredd) || !isset($mapp) || !isset($bakgrund) ){ exit("Du har utelämnat något vitalt argument i funktionen!<br /> Du bör kalla funktionen med <pre>'imageresize( bildnamn, maxbredd, maxhöjd, målmapp, hexadecimal bakgrundsfärg)'</pre>"); } if($bakgrund == 0) $bakgrund="FFFFFF"; $bild_path = "/home/festiz/web/new/images/products/large/" . $bild; $target_path = "/home/festiz/web/new/images/products/" . $mapp . "/" . $bild; list($width, $height, $type, $attr) = getimagesize( $bild_path ); error_reporting (E_ALL); $abc = imagecreatefromjpeg( $bild_path ); $def = imagecreatetruecolor( $maxbredd, $maxhojd ); $ratio = $height/$width; if ( $ratio<1 ) { $new_bredd=$maxbredd; $new_hojd=$new_bredd*$ratio; } else { $new_hojd=$maxhojd; $new_bredd=$new_hojd*$ratio; } sscanf($bakgrund, "%2x%2x%2x", $red, $green, $blue); $stringcolor=ImageColorAllocate($def,$red,$green,$blue); imagefilledrectangle($def, 0, 0, $maxbredd, $maxhojd,$stringcolor); imagecopyresized($def, $abc, 0, 0, 0, 0, $new_bredd, $new_hojd, $width, $height); imagejpeg($def, $target_path, 100); ImageDestroy($abc); ImageDestroy($def); } |
|||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Nykomling
|
Använder följande när jag laddar upp och skapar thumbnails på mina sajter.
//$filadress=lokal filadress //$fotoid=filens namn if(copy("$filadress","fotoarkiv/$fotoid.jpg")){ //om uppladdningen lyckas // ändra storleken $size = getimagesize ("fotoarkiv/$fotoid.jpg"); $ursprwidth=$size[0]; $ursprheight=$size[1]; //bredd>höjd if($size[0]>$size[1] && $size[0]>410){ $size[1]=$size[1]*410/$size[0]; //size[0]=width $size[0]=410; } elseif($size[1]>390){ $size[0]=$size[0]*390/$size[1]; $size[1]=390; } $src_img = imagecreatefromjpeg("fotoarkiv/$fotoid.jpg"); $dst_img = imagecreatetruecolor($size[0],$size[1]); imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $size[0], $size[1], $ursprwidth, $ursprheight); imagejpeg($dst_img, "fotoarkiv/$fotoid.jpg", 75); //slut ändra storlek //skapa thumbnail $size = getimagesize ("fotoarkiv/$fotoid.jpg"); $ursprwidth=$size[0]; $ursprheight=$size[1]; //bredd>höjd if($size[0]>$size[1] && $size[0]>100){ $size[1]=$size[1]*100/$size[0]; //size[0]=width $size[0]=100; } elseif($size[1]>100){ $size[0]=$size[0]*100/$size[1]; $size[1]=100; } //annars blir d ingen förändring av storleken $src_img = imagecreatefromjpeg("fotoarkiv/$fotoid.jpg"); $dst_img = imagecreatetruecolor($size[0],$size[1]); imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $size[0], $size[1], $ursprwidth, $ursprheight); imagejpeg($dst_img, "fotoarkiv/thumbnails/$fotoid.jpg", 75); //slut skapa thumbnail flush(); header("Location: fotoarkiv.php"); } //slut om uppladdningen lyckades else{ mysql_query("delete from fotoarkiv where id='$nyttfotoid'"); echo "uppladdningen misslyckades"; } |
||
![]() |
![]() |
Svara |
Ämnesverktyg | |
Visningsalternativ | |
|
|