[ Predrag Supurovic @ 10.11.2011. 20:47 ] @
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?

[ kelja @ 10.11.2011. 22:32 ] @
Hm, ovo je bas cudno...
Jesi ubacivao ovaj treci parametar imagejpeg() funkcije, ili je default?
[ pajaja @ 11.11.2011. 02:14 ] @
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.
[ Predrag Supurovic @ 11.11.2011. 05:51 ] @
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.
[ Bojan Kopanja @ 11.11.2011. 07:17 ] @
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 ;).
[ ivan.a @ 11.11.2011. 07:55 ] @
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?
[ Predrag Supurovic @ 11.11.2011. 08:39 ] @
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.
[ vatri @ 11.11.2011. 12:57 ] @
Jesi mozda probao sa imagepng() ?
[ Predrag Supurovic @ 11.11.2011. 14:56 ] @
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.
[ ivan.a @ 12.11.2011. 01:24 ] @
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.
[ zmil @ 24.11.2011. 10:49 ] @
http://www.imagemagick.org/script/index.php
Uklucis exec funkciju i dobijes kvalitet a ne gdi