Kom ihåg mig?
Home Menu

Menu


Göra thumbnails i PHP

Ämnesverktyg Visningsalternativ
Oläst 2004-07-28, 10:18 #1
Filips avatar
Filip Filip är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2003
Inlägg: 935
Filip Filip är inte uppkopplad
Mycket flitig postare
Filips avatar
 
Reg.datum: Jan 2003
Inlägg: 935
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.");

*/
Filip är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-07-28, 10:29 #2
nallebjorn nallebjorn är inte uppkopplad
Nykomling
 
Reg.datum: Mar 2004
Inlägg: 41
nallebjorn nallebjorn är inte uppkopplad
Nykomling
 
Reg.datum: Mar 2004
Inlägg: 41
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)
nallebjorn är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-07-28, 10:39 #3
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
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`;
Det där e lite trix jag kör med, delvis för att jag inte orkade plöja igenom phps alla funktioner, finns säkert nån. Jag använder iaf imagicks "convert" som finns på dom flesta linuxar nuförtiden..
grazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-07-28, 11:19 #4
zorans avatar
zoran zoran är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2004
Inlägg: 598
zoran zoran är inte uppkopplad
Mycket flitig postare
zorans avatar
 
Reg.datum: Jun 2004
Inlägg: 598
Citat:
Originally posted by grazzy@Jul 28 2004, 10:39
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`;
Det där e lite trix jag kör med, delvis för att jag inte orkade plöja igenom phps alla funktioner, finns säkert nån. Jag använder iaf imagicks "convert" som finns på dom flesta linuxar nuförtiden..
Nackdelen med denna metod är att den förmodligen inte fungerar i "Safe mode".

/Zoran
zoran är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-07-28, 11:20 #5
Filips avatar
Filip Filip är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2003
Inlägg: 935
Filip Filip är inte uppkopplad
Mycket flitig postare
Filips avatar
 
Reg.datum: Jan 2003
Inlägg: 935
Citat:
Originally posted by nallebjorn@Jul 28 2004, 11:29
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)
@nallebjorn - Det fungerade mycket bättre med imagecreatetruecolor()!
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.
Filip är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-07-28, 20:31 #6
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Citat:
Originally posted by zoran@Jul 28 2004, 11:19
Nackdelen med denna metod är att den förmodligen inte fungerar i "Safe mode".
Jo, klart den gör...

Har administratören confat PHP rätt och gjort inställningarna rätt så skall imagemagick fungera utmärkt i Safe_mode.
Jonas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-07-28, 22:00 #7
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
Citat:
Ursprungligen postat av Filip
Citat:
Ursprungligen postat av nallebjorn
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)
@nallebjorn - Det fungerade mycket bättre med imagecreatetruecolor()!
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.
filip: yes, det e good shit att komprimera om även orginalbilden då den oftast blir ~30-40% mindre utan synbara artifakter.

Såvida man inte är proffsfotograf då kanske, men det är knappast så i mitt fall
grazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-08-09, 14:00 #8
festizs avatar
festiz festiz är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2004
Inlägg: 302
festiz festiz är inte uppkopplad
Flitig postare
festizs avatar
 
Reg.datum: Jun 2004
Inlägg: 302
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&auml;mnat n&aring;got vitalt argument i funktionen!<br />
Du b&ouml;r kalla funktionen med <pre>'imageresize( bildnamn, maxbredd, maxh&ouml;jd, m&aring;lmapp, hexadecimal bakgrundsf&auml;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);
}
Du får använda denna funktion hur du vill och skriva om den hur du vill, även kommersiella projekt går bra då jag betraktar denna kodsnutt som släppt under GPL.
festiz är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-08-27, 15:42 #9
affe_810221 affe_810221 är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2004
Inlägg: 38
affe_810221 affe_810221 är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2004
Inlägg: 38
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";
}
affe_810221 är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 12:42.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017