• 10 odgovora
  • 4.026 pregleda
Kao kvalitetno uraditi resize fotografje u PHP? 10.11.2011. u 20:47 · pre 182 meseci #1
Napravio sam opciju za promenu dimenyije fotografije nakon uploada da bi bila prilagodjena velicini kojom se prikayuje na strani. Napravio sam sve sto mi treba po pitanju racuna dimenzija i resklarianja.

Medjutim, fotografije ispadnju prilicno lose i nekvalitetne. Evo primer kako izgleda na ovoj strani: http://www.fkslobodapointsevojno.rs/vesti/v112 Primetite gomilu belih tackica, kryave linije i slicna izoblicenja.

U obradi fotografije koristim: imagecreatefromjpeg(), imagecreatetruecolor(), imagecopyresized() i ImageJPEG().

Postoji li neki drugi nacin promene dimenzije fotografije koji daje kvalitetniji rezultat od ovoga?

Potpis
http://pedja.supurovic.net - http://wireless.uzice.net - Besplatni .RS domeni - Mikrotik uputstva - YT9TP - OpenStreetMap Srbija
Re: Kao kvalitetno uraditi resize fotografje u PHP? 11.11.2011. u 02:14 · pre 182 meseci #3
Ako ne zelis da koristis nesto posebno za to, pokusaj da iskoristis imagecopyresampled() umesto imagecopyresized(), posto ova prva radi interpolaciju slike pri smanjivanju. Ne znam koliko kvalitetna fotka ti treba posto taj algo za resample koji koristi daje malo blurovane fotke.
Potpis
xxx
mali mali mali kamičak...nebo plave boje.
In Memoriam: Madzone Zeka(15.09.2005-16.09.2005)
Re: Kao kvalitetno uraditi resize fotografje u PHP? 11.11.2011. u 05:51 · pre 182 meseci #4
Probao sam sve sto sam iskopao. PrRoblem je sto reskaliranje radi cudno, kao da funkcija prosto uzme svaki n-ti piksel, pa sve tanke linije, narocito kose ili zaobljenje postaju krzave, svugde se pojavljuju beli pikseli po ivicama povrsina i sve tako nesto.

Uspeo sam da nesto popravim korsicenjem imagefilter() sa blur efektom, ali to dobro radi samo ako se slika mnogo smanjuje. Probacu danas da uradim skaliranje u nekoliko koraka a ne odjednom na potrebnu rezoluciju da vidim da li ce tad blur bolje funkcionise.
Potpis
http://pedja.supurovic.net - http://wireless.uzice.net - Besplatni .RS domeni - Mikrotik uputstva - YT9TP - OpenStreetMap Srbija
Re: Kao kvalitetno uraditi resize fotografje u PHP? 11.11.2011. u 07:17 · pre 182 meseci #5
Ovako nesto je vec bilo na forumu, ja sam samo malo doradio i mogu ti reci da radi skroz super :)... Evo ga kod funkcije za resize:

Code:

  public function paddedImage ($src_filename, $dest_filename, $_width, $_height, $bg_R, $bg_G, $bg_B, $quality) {
    
    if(!is_dir($src_filename))
    {    
      $ext = strtolower(pathinfo($src_filename, PATHINFO_EXTENSION));
      
      switch(strtolower($ext))
      {
        case "jpg":
        case "jpeg":
          $src = imagecreatefromjpeg($src_filename);
          break;
        case "png":
          $src = imagecreatefrompng($src_filename);
          break;
        case "gif":
          $src = imagecreatefromgif($src_filename);
          break;
      }
      
      $width = @imagesx($src);
      $height = @imagesy($src);
      
      if($width != 0 && $height != 0)
      {
        $ratio_w = $_width / $width;
        $ratio_h = $_height / $height;

        $ratio = ($ratio_w < $ratio_h) ? $ratio_w : $ratio_h;

        $new_width = $width * $ratio;
        $new_height = $height * $ratio;

        $padd_x = ($_width - $new_width) / 2;
        $padd_y = ($_height - $new_height) / 2;

        $dest = imagecreatetruecolor($_width, $_height);
        $background_color = imagecolorallocate($dest, $bg_R, $bg_G, $bg_B);
        imagefilledrectangle($dest, 0, 0, $_width, $_height, $background_color);

        imagecopyresampled($dest, $src, $padd_x, $padd_y, 0, 0, $new_width, $new_height, $width, $height);

        if ($dest_filename) {
            imagejpeg($dest, $dest_filename, $quality);
        } else {
            header('Content-Type: image/jpeg');
            imagejpeg($dest, null, $quality);
        }

        imagedestroy($dest);
        imagedestroy($src);
      }
    }
  }


Funkcija se poziva ovako:

Code:
paddedImage($src_filename, $dest_filename, 313, 235, 255, 255, 255, 100);


Prvi i drugi parametri su jasni, treci i cetvrti su dimenzije resized slike, ovo 255, 255, 255 je pozadinska boja, tj. bela u ovom slucaju i 100 je naravno kvalitet jpg fajla :).

Nadam se da sam pomogao bar malo ;).
Potpis
ex Strog

http://www.zeussoftware.rs
Re: Kao kvalitetno uraditi resize fotografje u PHP? 11.11.2011. u 07:55 · pre 182 meseci #6
Citat:
Predrag Supurovic: U obradi fotografije koristim: imagecreatefromjpeg(), imagecreatetruecolor(), imagecopyresized() i ImageJPEG().

Koristi imagecopyresampled() umesto imagecopyresized()
Koji ti je treći parametar kod ImageJPEG()?

Da li si probao da generišeš slike sa npr. timthumb ... čisto da vidiš rezultate?
Potpis
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
Re: Kao kvalitetno uraditi resize fotografje u PHP? 11.11.2011. u 08:39 · pre 182 meseci #7
Prvobitno i jesam koristio ali je rezultat bio losiji pa sam ostavio imagecopyresized() iako je logicnije da ova prva radi bolje. Probacu i to jos jednom, mozda sam se nesto zeznuo prosli put kada sam je testirao.
Potpis
http://pedja.supurovic.net - http://wireless.uzice.net - Besplatni .RS domeni - Mikrotik uputstva - YT9TP - OpenStreetMap Srbija
Re: Kao kvalitetno uraditi resize fotografje u PHP? 11.11.2011. u 14:56 · pre 182 meseci #9
Ma kao i uvek, bude neka budalastina. Mislio sam da sam koristio imagecopyresampled() a u kodu mi ostalo imagecopyresized(). CIm sam to sredio sad fotografije izgledaju ok.
Potpis
http://pedja.supurovic.net - http://wireless.uzice.net - Besplatni .RS domeni - Mikrotik uputstva - YT9TP - OpenStreetMap Srbija
Re: Kao kvalitetno uraditi resize fotografje u PHP? 12.11.2011. u 01:24 · pre 181 meseci #10
Zato sam prvo napisao da koristiš imagecopyresampled() jer ta funkcija uklanja noise (koji se video kod tebe na slici), ali zato zahteva više CPU resursa.
Potpis
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme