Gå til innhold

Lage automatiske thumbmails o.l.


Anbefalte innlegg

Hei!

 

Holder litt på med bilder og PHP nå da, så når brukeren laster opp ett bilde vil jeg at det automatisk skal bli lagd en mindre og en større versjon av bildet.

Hvordan gjør jeg dette lettest?

 

Har sett litt på funksjoner som, imagecopyresampled og imagecopy o.l, men det er bare bilder som gjør om på ett bilde man har fra før av... er dette sånn de fleste sider gjør det eller? Syns det virket litt mye ut liksom, presse mer kode brukeren må kjøre liksom, selv om flere bilder = mer plass på serveren, men kommer nå igjen på hva som er best for de forskjellige prosjektene.. :)

 

Men, tilbake til tema... er det noen bra/enkle funksjoner for å kopiere ett bilde + at det blir resized?

 

Takker for svar :)

Lenke til kommentar
Videoannonse
Annonse

imagecreate, imagecreatefromjpeg/png/gif, imagecreatetruecolor og imagecopyresized kan vel være greie funksjoner å bruke for noe sånt.

Hvorfor i all verden skal du lage en større utgave av bildet du laster opp? Kvaliteten kommer jo til å bli kraftig nedsatt. Lag heller to mindre versjoner.

Lenke til kommentar
imagecreate, imagecreatefromjpeg/png/gif, imagecreatetruecolor og imagecopyresized kan vel være greie funksjoner å bruke for noe sånt.

Hvorfor i all verden skal du lage en større utgave av bildet du laster opp? Kvaliteten kommer jo til å bli kraftig nedsatt. Lag heller to mindre versjoner.

5924841[/snapback]

 

Nja, skal prøve å holde en ren stil gjennom hele siden... skal ikke bruke det originale bildet i det hele tatt faktisk, skal lage en kopi på kanskje 500 x 500, en på 200 x 200 og en på 70 x 70 (thumbmail)... er bare for å holde stilen på siden ren sånn at det ikke plutselig kommer ett som er SVÆRT og så plutselig ett lite ett og sånn..

 

Vet man kan endre på størrelsen i HTML også, men da laster man fremdeles hele bildet, istedenfor å laste ned en nedstrippet (evt. oppstrippet) versjon.

Min lille teori hvertfall da :)

Lenke til kommentar

Ok. Men fremdeles bør du ikke bruke php til å forstørre bildet, last heller opp ett som er enda større og forminsk det. Hvis ikke blir nok det på 500*500 veldig blurrete eller med tydelige piksler.

Fant forresten en liten kodesnutt i en kommentar på php-manualen for å lage thumbs. Vet ikke hvor bra den er, har ikke testet den selv, men her får du iallfall et hint om hvordan det kan gjøres:

This is how you can create a thumbnail with maximum height and width. This way it will fit nicely in a gallery table. In this example $im is the source image
<?
  //calculate thumb size
          $ow = imagesx($im);
          $oh = imagesy($im);
          $maxh = 100;
          $maxw = 150; 
          $new_h = $oh;
          $new_w = $ow;

          if($oh > $maxh || $ow > $maxw){
              $new_h = ($oh > $ow) ? $maxh : $oh*($maxw/$ow);
              $new_w = $new_h/$oh*$ow;
          }

          //create dst image
          $dst_img = ImageCreateTrueColor($new_w,$new_h);
          //resize and copy image
          ImageCopyResized($dst_img, $im, 0,0,0,0, $new_w, $new_h, ImageSX($im), ImageSY($im));    
          $function_image_new($dst_img,$galdir.$file);
?>

Lenke til kommentar

Tror faktisk jeg vet hvordan jeg skal gjøre det nå...

Og det er jo brukere som skal laste opp bilder, jeg vet ikke hvordan bilder de skal ha, men man får hvertfall en stil som går igjen over hele siden, det er vel målet i første omgang :)

 

Takk for svar btw!

Lenke til kommentar

For å ikke spamme en helt ny tråd så fortsetter jeg heller her jeg.. :)

 

Er mulig jeg tar en litt lettere fremgangsmåte og bruke lignende kode som dette over alt heller, blir mye mindre brukt diskplass da:

function IMG_Resize_Large( $filepath )
{
// Set a maximum height and width
$width = 400;
$height = 400;

// Get new dimensions
if(!list($width_orig, $height_orig) = getimagesize($filepath) )
{
 echo "<br />list - feil <br />";
 return false;
}

if ($width && ($width_orig < $height_orig)) {
   $width = ($height / $height_orig) * $width_orig;
} else {
   $height = ($width / $width_orig) * $height_orig;
}

// Resample
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filepath);
if( !imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig) )
{
 echo "<br />imagecopyresampled - feil<br />";
 return false;
}

imagejpeg($image_p, NULL, 100);
return true;
}

 

Lurte bare på om dette blir mer problemer enn løsninger i fremtiden.. ?

Er dette en vesentlig større belastning for serveren med flere brukere?

 

Denne koden funker da ikke helt enda, man kan ikke se bildet hvis man har sendt noe til output buffer (var det vel?). Må derfor bruke ob_flush() e.l (har ikke testet enda.. ), er dette en "god" måte å gjøre det på?

 

Håper på svar :)

Lenke til kommentar

Resampling av bilder er vel en av de tyngste (vanlige) jobbene som gjøres på webservere. Så lenge ikke bildet blir resamplet hver gang en side vises f.eks. bør det vel gå bra :-) Kommer selvfølgelig an på hvor mange brukere det er på siden osv osv..

Lenke til kommentar

Vel, de skal faktisk det... på forsiden er det opp til 5 bilder som skal bli resamplet. Når folk gjør søk på siden så skal det også resamples bilder... tror du det blir for mye?

 

Har ikke akkurat mange brukere nå for å si det sånn, kan hende det blir flere etterhvert, må vel kanskje legges om etterhvert da..

 

Og forresten, hvordan kan jeg gjøre så man kan se bildene etter at man har sendt "header information" ? :)

Endret av kimla
Lenke til kommentar

evt. lage thumbnail dersom det ikke eksisterer. Da er det kun "pionérene" som vil belaste serveren, og det kun en gang (per nye bilde).

 

For miksing med headere og output kan du se på ob_* funksjonene, der ob står for output buffering. Ved å bufre hele siden før du slenger den ut (gjerne med ob_gzhandler() for å komprimere output) så kan du få opptil 15% raskere sider mener jeg å ha lest. I tillegg så kan du slenge på headere når du vil om jeg ikke tar feil. (Før du flusher da selvsagt)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...