Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skalowanie w GD
Forum PHP.pl > Forum > PHP
NuLL
Witam,

Przez moje ręce przeszedł projekt w którym było potrzebne skalowanie obrazkow.
Do skalowania napisałem coś takiego
  1. <?php
  2.  
  3. function create_thumb_wfixed($file_name_src, $file_name_dest, $weight,$quality=100)
  4. {
  5.  if (file_exists($file_name_src) && isset($file_name_dest))
  6.  {
  7.  $est_src = pathinfo(strtolower($file_name_src));
  8.  $est_dest = pathinfo(strtolower($file_name_dest));
  9.  $size = getimagesize($file_name_src);
  10.  $w = number_format($weight, 0, ',', '');
  11.  $h = number_format(($size[1]/$size[0])*$weight,0,',','');
  12.  
  13.  if ($est_dest['extension'] == &#092;"gif\" || $est_dest['extension'] == \"jpg\")
  14.  {
  15.  $file_name_dest = substr_replace($file_name_dest, 'jpg', -3);
  16.  $dest = imagecreatetruecolor($w, $h);
  17.  //imageantialias($dest, TRUE);
  18.  } elseif ($est_dest['extension'] == &#092;"png\")
  19.  {
  20.  $dest = imagecreatetruecolor($w, $h);
  21.  //imageantialias($dest, TRUE);
  22.  } else
  23.  {
  24. return FALSE;
  25.  }
  26.  
  27.  switch($size[2])
  28.  {
  29.  case 1:  //GIF
  30.  $src = imagecreatefromgif($file_name_src);
  31.  break;
  32.  case 2:  //JPEG
  33.  $src = imagecreatefromjpeg($file_name_src);
  34.  break;
  35.  case 3:  //PNG
  36.  $src = imagecreatefrompng($file_name_src);
  37.  break;
  38.  default:
  39.  return FALSE;
  40.  break;
  41.  }
  42.  imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $h, $size[0], $size[1]);
  43.  
  44.  switch($size[2])
  45.  {
  46.  case 1:
  47.  case 2:
  48.  imagejpeg($dest,$file_name_dest, $quality);
  49.  break;
  50.  case 3:
  51.  imagepng($dest,$file_name_dest);
  52.  }
  53.  return TRUE;
  54.  }
  55.  return FALSE;
  56. }
  57.  
  58. ?>

Ta funkcja jak łatwo się domyślic ta funkcja skaluje obrazki na zadana szerokość dopasowując wysokość obrazka. I działa niby ok - ale czemu plik o rozmiarach 500x375 ma rozmiar około 130 kB :?:
Czy GD jest aż tak ułomne czy to ja coś zrobiłem nie tak :?:
Myślę, że to może to drugie tongue.gif ale nie wiem mam pojęcia co sad.gif
FiDO
Jaki plik ma tyle? png czy jpg? Jesli png to moze obrazek sie nie nadaje do png (png ma podobne zastosowanie jak gif, czyli jakies fotki itp wychodza mu z monstrualnymi rozmiarami), a jesli jpg to moze wina quality na 100? Nie piszesz z jakiej korzystasz, wiec moge zakladac, ze korzystasz z domyslnosci ostatniego parametru smile.gif
Najlepiej daj jakiegos sampla, ktory Ci sie robi taki strasznie duzy, wtedy mozna bedzie powiedziec cos wiecej.
NuLL
Dzięki FiDO - jesteś wielki Rkingsmiley.png

Generuję JPG-i oczywiście.

Problem jest właśnie w jakości - jak ustawie jakość na 75 zamiast 100 to obrazek ma automatycznie około 35 kB a nie 4x razy więcej smile.gif
FiDO
Tylko nie przesadz w druga strone smile.gif 100 dla jpg to jest marnotrastwo miejsca, ale jak dasz za malo to beda bardziej widoczne artefakty jpga.. trzeba sobie dobrac doswiadczalnie jakosc, do wiekszosci jednak te 75 spokojnie starcza.
NuLL
Zostawiłem 75 - obrazek ma w większości rozmiar 100xcos_tam tak więc jakość nie przeszkadza.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.