Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> skalowanie obrazka, szukam funkcji
ktuvok
post 11.08.2005, 19:28:20
Post #1





Grupa: Zarejestrowani
Postów: 243
Pomógł: 0
Dołączył: 30.11.2003

Ostrzeżenie: (0%)
-----


Głowię się nad funkcją, która skalowałaby zdjęcie do miniaturki o zadanych maksymalnych rozmiarach i nie mogę wymyśleć - czy ktoś słyszał może o gotowej funkcji?

Przejrzałem forum, ale trafiłem tylko na funkcję służącą do trwałej zmiany obrazka, zapisującą go w osobnym pliku. Ja chciałbym zdjęcie o normalnych rozmiarach, zapisane na serwerze, wyświetlać jako miniaturkę.

Pozdrawiam,
K
Go to the top of the page
+Quote Post
aleksander
post 11.08.2005, 19:49:02
Post #2





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

Ostrzeżenie: (0%)
-----


a po co Ci do tego funkcja? w ustawiasz sobie atrybuty width i height tagi <img /> obrazka i juz:)
Go to the top of the page
+Quote Post
ktuvok
post 11.08.2005, 19:50:27
Post #3





Grupa: Zarejestrowani
Postów: 243
Pomógł: 0
Dołączył: 30.11.2003

Ostrzeżenie: (0%)
-----


Przecież wtedy mi się rozciągnie albo spłaszczy!
Go to the top of the page
+Quote Post
Liko
post 11.08.2005, 21:04:01
Post #4





Grupa: Zarejestrowani
Postów: 436
Pomógł: 6
Dołączył: 8.11.2003
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


  1. <?php
  2. function forceConstraints($srcFile, $srcType, $dstType, $dstWidth, $dstHeight, $dstPath)
  3. {
  4.  if ($srcType == "jpg")
  5.  $handle = @imagecreatefromjpeg($srcFile);
  6.  else if ($srcType == "png")
  7.  $handle = @imagecreatefrompng($srcFile);
  8.  else if ($srcType == "gif")
  9.  $handle = @imagecreatefromgif($srcFile);
  10.  else
  11.  return false;
  12.  
  13.  if (!$handle) return false;
  14.  
  15.  $srcWidth = @imagesx($handle);
  16.  $srcHeight = @imagesy($handle);
  17.  
  18.  $newHandle = @imagecreatetruecolor($dstWidth, $dstHeight);
  19.  if (!$newHandle)
  20.  return false;
  21.  
  22.  if($srcHeight < $srcWidth)
  23.  {
  24.  $ratio = (double)($srcHeight / $dstHeight);
  25.  
  26.  $cpyWidth = round($dstWidth * $ratio);
  27.  if ($cpyWidth > $srcWidth)
  28.  {
  29.  $ratio = (double)($srcWidth / $dstWidth);
  30.  $cpyWidth = $srcWidth;
  31.  $cpyHeight = round($dstHeight * $ratio);
  32.  $xOffset = 0;
  33.  $yOffset = round(($srcHeight - $cpyHeight) / 2);
  34.  } else {
  35.  $cpyHeight = $srcHeight;
  36.  $xOffset = round(($srcWidth - $cpyWidth) / 2);
  37.  $yOffset = 0;
  38.  }
  39.  
  40.  } else {
  41.  $ratio = (double)($srcWidth / $dstWidth);
  42.  
  43.  $cpyHeight = round($dstHeight * $ratio);
  44.  if ($cpyHeight > $srcHeight)
  45.  {
  46.  $ratio = (double)($srcHeight / $dstHeight);
  47.  $cpyHeight = $srcHeight;
  48.  $cpyWidth = round($dstWidth * $ratio);
  49.  $xOffset = round(($srcWidth - $cpyWidth) / 2);
  50.  $yOffset = 0;
  51.  } else {
  52.  $cpyWidth = $srcWidth;
  53.  $xOffset = 0;
  54.  $yOffset = round(($srcHeight - $cpyHeight) / 2);
  55.  }
  56.  }
  57.  
  58.  if (!@imagecopyresampled($newHandle, $handle, 0, 0, $xOffset, $yOffset, $dstWidth, $dstHeight, $cpyWidth, $cpyHeight))
  59.  return false;
  60.  @imagedestroy($handle);
  61.  
  62.  if ($dstType == "png")
  63.  @imagepng($newHandle, $dstPath.".png");
  64.  else if ($dstType == "jpg")
  65.  @imagejpeg($newHandle, $dstPath.".jpg", 100);
  66.  else if ($dstType == "gif")
  67.  @imagegif($newHandle, $dstPath.".gif");
  68.  else
  69.  return false;
  70.  @imagedestroy($newHandle);
  71.  return true;
  72. }
  73. ?>


Funkcja wyciągnieta prosto z komenatrzy w manualu exclamation.gif! Przeglądaj je czasami.
Go to the top of the page
+Quote Post
LuckyStrike
post 18.08.2005, 12:10:54
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 4.05.2003
Skąd: wawa

Ostrzeżenie: (0%)
-----


Cześć! Dorzucę swoje 3 grosze winksmiley.jpg Nie jest to bardzo eleganckie rozwiązanie, ale bardzo proste i skuteczne. Opiera się na skalowaniu obrazka do zadanej szerokości lub wysokości tak, aby właśnie nie spłaszczyć/rozciągnąć go.
Pętla pomniejsza obrazek za każdym razem o 1% aż do zadanej wys/szer.
Pozdrawiam!


  1. <?
  2. if ( ! fopen ("zdjecia/sprzet/$img")){
  3. error_log("$czas Nie mogę otworzyc pliku: zdjecia/sprzet/$img",3,"logi/bledy.log");}
  4. $dane = getimagesize("zdjecia/sprzet/$img");
  5. $szer1=$dane[0];
  6. $wys1=$dane[1];
  7. $zmiana2=($dane[0]*1/100);
  8. $zmiana3=($dane[1]*1/100);
  9.  
  10. while ($wys1 > 600){
  11. $wys1 = ($wys1-$zmiana3);
  12. $szer1 = ($szer1-$zmiana2);
  13. }
  14.  
  15. //echo "szer po zmianie. $szer<br>";
  16. //echo "wys po zmianie. $wys<br>";
  17.  
  18. <html>
  19. <body>
  20. <img SRC="zdjecia/sprzet/$img" width=$szer1 height=$wys1 border=0 >
  21. </BODY>
  22. </HTML>");
  23. ?>
Go to the top of the page
+Quote Post
Pigula
post 18.08.2005, 14:47:40
Post #6





Grupa: Zarejestrowani
Postów: 446
Pomógł: 0
Dołączył: 5.03.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


szukales nie dokladnie tongue.gif tiraeth zamiescil swoja wersje tutaj dalej sa pomysly na modyfikacje jej
Go to the top of the page
+Quote Post
LuckyStrike
post 18.08.2005, 15:12:22
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 4.05.2003
Skąd: wawa

Ostrzeżenie: (0%)
-----


Ja właściwie nie szukałem wcale. Po prostu natknąłem sie na taki wątek i wrzuciłem swój skrypcik, który jest bardzo krótki, prosty do zrozumienia i co najważniejsze działa...
Pewnie nie mam racji, ale raczej jestem za prostymi rozwiązaniami (porównaj ilość kodu) które będą zrozumiałe dla początkujących.
Pozdrawiam!
Go to the top of the page
+Quote Post
ActivePlayer
post 18.08.2005, 20:56:28
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


ale Twój skrypt marnuje troszke 'przesył transferu' bo obrazek pomimo tego ze jest duzy, wyswietla sie w malych rozmiarach
Go to the top of the page
+Quote Post
Pigula
post 19.08.2005, 08:32:53
Post #9





Grupa: Zarejestrowani
Postów: 446
Pomógł: 0
Dołączył: 5.03.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(LuckyStrike @ 2005-08-18 16:12:22)
Pewnie nie mam racji, ale raczej jestem za prostymi rozwiązaniami (porównaj ilość kodu) które będą zrozumiałe dla początkujących.

nie masz racji smile.gif ilosc linijek kodu nie moze byc glownym kryteriu oceniania wydajnosci programu
Pozdrawaim
Go to the top of the page
+Quote Post
LuckyStrike
post 19.08.2005, 08:51:00
Post #10





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 4.05.2003
Skąd: wawa

Ostrzeżenie: (0%)
-----


Cytat
ale Twój skrypt marnuje troszke 'przesył transferu' bo obrazek pomimo tego ze jest duzy, wyswietla sie w malych rozmiarach


To jest dla mnie argument. Zgadzam się w 100%.

Cytat
nie masz racji  ilosc linijek kodu nie moze byc glownym kryteriu oceniania wydajnosci programu

Wcale nie twierdzę że ilość linijek ma wpływ na wydajność programu!
Często jest dokładnie na odwrót - czego przykładem jest własnie mój skrypt, co słusznie zauważył ActivePlayer.
Chodziło mi po prostu o znalezienie rozwiązania, które tak naprawdę samo nasuwa się na mysl i jest zrozumiałe dla kogoś początkujacego. Moim zdaniem w ten sposób mozna nauczyc się wykożystywania już posiadanej wiedzy z php zamiast kopiować bardzo dobrego gotowca, którego zrozumienie może być dla niektórych za trudne...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 13:26