webForumDet fria alternativet

Skapa thumbnails

11 svar · 1 024 visningar · startad av Patrik81

Patrik81Medlem sedan okt. 2001537 inlägg
#1

Alltså, jag har sökt här på wF, och det jag fann trodde jag skulle räcka, men nu inser jag att jag inte hajar ett skit...

Låt oss säga att jag har ett gäng bilder i en mapp, och dessa vill jag skapa thumbnails av, alltså skapa fysiska bild-filer på hårddisken, bara i mindre format, vilka funktioner behöver jag då använda mig utav?

Just nu känns det bara som om jag har ett virrvarr av kod, tror att det enklaste är att slänga det jag har, och börja om från början (plus att jag skäms så över den fulkod jag knådat ihop och misshandlat, så jag vill helst inte visa den) ;)

Jag får intrycket av att man antingen redan behöver en fil på hårddisken, som man sedan skriver till, eller att man har en php-fil fyld med typ imagecreate-funktioner som sedan fixar till det.

För till exempel (kopierat från php.net)
bool imagecopyresampled ( resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)

Förklara för mig vad "resource dst_im" är. Det måste ju vara en bildfil redan, eller något... eller?

Snälla hjälp mig ur denna förvirring.

MVH Patrik

MatteMedlem sedan aug. 20002 970 inlägg
#2

Först måste du läsa in den fil du vill förminska. Det gör du t.ex med:

$src_im = imagecreatefromjpeg('sökväg_till/filnamn.jpg');

Där kanske det också varit aktuellt med imagecreatefromgif eller imagecreatefrompng.

Sedan måste du skapa bilden som ska innehålla din thumbnail:

$dstW = 100;  // Bredd på thumbnail
$dstH = 100; // Höjd på thumbnail
$dst_im = imagecreatetruecolor($dstW, $dstH);

dstX och dstY är var någonstans på din $dst_im (thumbnail) du ska lägga den förminskade bilden. Normalt lägger du den i högra över hörnet, vilket ger värden 0 och 0.

srcX och srcY är var någonstans på originalbilden du vill börja hämta. Vad du lägger för värden här beror lite på hur du vill skapa din thumbnail. Kvadratisk, proportionell, klippa ut kvadrat från ej kvadratisk bild. För enkelhets skull sätter vi dessa värden till 0 och 0.
Detta kommer att ge dig en förvanskad bild, men du kan senare arbeta vidare på det för att få den variant som du tycker är bäst.
Du har även då förståelsen över andras lösningar, och kan hitta tips där.

Sedan behöver du bredden och höjden på originalfilen. Det får du med:

$srcW = imagesx($src_im);
$srcH = imagesy($src_im);

Nu är det dags att tillverka din thumbnail:

imagecopyresampled ( $dst_im, $src_im, 0, 0, 0, 0, $dstW, $dstH, $srcW, $srcH);

Sedan behöver du skapa en fil av den. Vi skapar en JPEG-fil:

imagejpeg($dst_im, 'sökväg/thumb_filnamn.jpg', 90);

Den sista siffran står för komprimering. Ju högre tal desto mindre komprimering (och högre kvalitet och filstorlek).

Alternativt kunde du skickat bilden direkt till webbläsaren:

header('Content-type: image/jpeg');
imagejpeg($dst_im, '', 90);

Slutligen är det snyggt att städa upp efter sig:

imagedestroy($src_im);
imagedestroy($dst_im);

Hoppas det var till någon hjälp för dig. :)

Patrik81Medlem sedan okt. 2001537 inlägg
#3

Hatten av för dig Matte, det var en helt suverän genomgång!
Min kod var inte någonstans i närheten av att ha kunnat fungera.

Stort tack, nu skall här experimenteras.
MVH Patrik

filipbhMedlem sedan juli 2002402 inlägg
#4

Ursäkta att jag lånar denna tråd men jag tyckte skriptet var bra men har lite frågor. Hur ska man göra om ursprungsbilden är för stor? Är det nån inställning eller räcker det med kod i skriptet?

Patrik81Medlem sedan okt. 2001537 inlägg
#5

Hejsan, hur menar du med för stor?
Är det att bilden är för hög eller bred, och därmed inte kvadratisk?

Mvh Patrik

filipbhMedlem sedan juli 2002402 inlägg
#6

Patrik81 skrev:

Hejsan, hur menar du med för stor?
Är det att bilden är för hög eller bred, och därmed inte kvadratisk?

Mvh Patrik

Nej, jag menar att bilden är för stor byte-mässigt. Jag har bilder som ligger på i snitt 1.5 MB men skriptet vill inte förminska bilderna för, vad jag tror, det tar för lång tid. Ska göra ett försök igen och visa vad som kommer upp...

filipbhMedlem sedan juli 2002402 inlägg
#7

Detta kommer upp:
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 12288 bytes) in thumb.php on line 3

Rad 3 är:
$src_im = imagecreatefromjpeg('P7090020.JPG');

fiddlerMedlem sedan juli 20022 464 inlägg
#8

Din bild är för stor, inte bytemässigt utan pixelmässigt. Om du har möjlighet att ändra inställningarna i php.ini borde det gå, annars får du helt sonika minska ner bilderna innan du laddar upp dem.

filipbhMedlem sedan juli 2002402 inlägg
#9

fiddler skrev:

Din bild är för stor, inte bytemässigt utan pixelmässigt. Om du har möjlighet att ändra inställningarna i php.ini borde det gå, annars får du helt sonika minska ner bilderna innan du laddar upp dem.

Det vet jag inte om jag kan. Sidan ligger hos One... Och måste jag ändra bilderna ett steg kan jag lika gärna förminska bilden tillräckligt från början. Jag ska prata med One och se vad de kan göra. Annars får jag gå ner en upplösning på kameran.

filipbhMedlem sedan juli 2002402 inlägg
#10

För er som har samma problem och har One som webbhotell kan jag meddela att det för tillfället inte går. De har pratat om att ändra minnesgränsen för kunderna och om det blir verklighet kommer det även gå att förminska de större bilderna.

woodiMedlem sedan feb. 2000670 inlägg
#11

Installera ImageMagick!
http://www.imagemagick.com/

Enkelt att göra det mesta med bilder.

filipbhMedlem sedan juli 2002402 inlägg
#12

Tack för tipset

Genererad på 369 ms · cache AV · v20260730165559-full.f96bc7eb