Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][GD] Odstęp od ramki i inteligentne skalowanie
wojtek19115
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.07.2010

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


Witajcie, pisze skrypt podobny do demotywatorów i mam problem dotyczący odstępu od ramki oraz skalowania.

Oto kawałek mojego kodu
  1. <?php
  2. header("Content-type: image/jpeg");
  3. //Obrazek
  4. $obrazek = imagecreatefromjpeg("test.jpg");
  5. //Max szerokość
  6. $max = 500;
  7. //Wymiary X i Y obrazka
  8. $x = imagesx($obrazek);
  9. $y = imagesy($obrazek);
  10. //Tło
  11. $image = imagecreatetruecolor(($max + 50), ($y + 200));
  12. //Czarne tło
  13. $bg = imagecolorallocate($image, 0, 0, 0);
  14. //Zmiana rozdziałki
  15. if ($x > 475) {
  16. imagecopyresized($obrazek, $obrazek, 0, 0, 0, 0, 500, $y, $x, $y);
  17. }
  18. //Nałożenie Obrazka
  19. imagecopymerge($image,$obrazek,25,30,0,0,$max,$y,100);
  20. //Wyświetlenie
  21. imagejpeg($image,"",100);
  22. ?>

I mam wielką prośbę jak inteligentnie skalować rozmiar obrazka bo np obrazek 1600x1200 zmienia szerokość poprawnie ale strasznie rozjeżdża wysokość dlatego szukam wzoru na skalowanie obrazka taki jak np GIMP'ie gdy podamy max szerokość automatyczne dostosowuje wysokość.

I jak idealnie ustawić odstęp od lewego i prawego rogu obrazka biorąc pod uwagę obrazki =500 , <500, >500

Z góry dziękuję (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
sada
post
Post #2





Grupa: Zarejestrowani
Postów: 302
Pomógł: 24
Dołączył: 6.12.2008

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


W czwartej klasie podstawówki były chyba proporcje

Cytat
I jak idealnie ustawić odstęp od lewego i prawego rogu obrazka biorąc pod uwagę obrazki =500 , <500, >500


odstęp od czego?

Ten post edytował sada 21.08.2011, 13:34:40
Go to the top of the page
+Quote Post
wojtek19115
post
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.07.2010

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


Odstęp od ramki, ramkę generuje $max czyli wartość 500 + 50 aby uzyskać idealne wyśrodkowanie odstęp od lewej ustawiam na 25 ale gdy obrazek jest mniejszy od 500 całe wyśrodkowanie nie działa a nie chcę generować z rozmiaru obrazka bo wtedy na napis miejsca nie ma
Go to the top of the page
+Quote Post
Sephirus
post
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Ok zasada jest prosta:

Musisz sobie na stałe założyć czy idziesz na height czy width.

Jedna z tych wartości musi być określona jako maksymalna. Jeżeli ustawisz width na na przykład 500px to większego być nie może i wtedy musisz skalować height tak aby było proporcjonalne do width. Przykład:

Ustalamy, że maksymalny width to 500px. Ktoś wrzuca zdjęcie o rozmiarze 1000x600px.

  1. $maxW = 500;
  2. $w = 1000;
  3. $h = 600;
  4.  
  5. $newW = 500;
  6. $newH = round($h * $maxW/$w);


Zatem obrazek będzie przeskalowany na $newW x $newH (IMG:style_emoticons/default/wink.gif) Matematyka jest prosta:

NOWA_WYSOKOŚĆ = STARA_WYSOKOŚĆ x (NOWA_SZEROKOSC/STARA_SZEROKOSC).

Innymi słowy mnożysz oryginalną wysokość obrazka przez stosunek nowo ustalonej szerokości do oryginalnej szerokości ;P Jak width utniesz o pół to i proporcjonalnie o to samo musisz obciąć height aby tzw aspect ratio był zachowany (IMG:style_emoticons/default/wink.gif)

EDIT: zapomniałem o tej ramce...

Zasada też jest prosta. Dla mniejszych obrazków jak i dla tych co się mieszczą proponuje zrobić tak:

Powiedzmy że szerokość wyjściowego obrazka to też 500px i chcesz mieć minimum marginesy na 50px. Stosujesz metodę przedstawioną przeze mnie wyżej dla większych obrazków ale dla $maxW = 400 (no bo marginesy mają mieć po 50 a 500-2x50 = 400). Dla mniejszych w ogóle nie musisz jej stosować. I teraz tak. Wartość X gdzie ma być wstawiony obrazek to nic innego niż:

  1. $x = 50 + (400 - $w)/2;


gdzie $w = to wyjściowa szerokość oryginalnego obrazka (po ewentualnym użyciu metody #1)

Tyle (IMG:style_emoticons/default/wink.gif)

HTH (IMG:style_emoticons/default/wink.gif)

Ten post edytował Sephirus 21.08.2011, 21:01:32
Go to the top of the page
+Quote Post
wojtek19115
post
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.07.2010

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


Wielkie dzięki za naprowadzenie na rozwiązanie (IMG:style_emoticons/default/biggrin.gif)
Oto efekt końcowy mojego skryptu:
(IMG:http://zrzucaj.co.cc/upload/default.jpeg-3050-628.jpeg)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 26.09.2025 - 19:21