Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skalowanie zdjęcie do takiej wielkości, aby szerokość i wysokość nie były mniejsze od pewnej zadanej wielkości.
Forum PHP.pl > Forum > PHP
marcinp1984
Witam smile.gif
Nie wiem czy uda mi się dobrze wytłumaczyć o co mi chodzi więc może od razu dodam jakąś fotkę a pod nią opiszę co i jak.

A więc tak:
- czerwone pole to pewien obszar o zadanej stałej wielkości , który powinien być całkowicie wypełniony przez zdjęcie
- czarno-białe zdjęcie to zdjęcie oryginalne
- niebieskie to zdjęcie przeskalowane, oczywiście z zachowaniem proporcji (na zdjęciu o proporcje zbytnio już nie dbałem biggrin.gif miało być tylko tak do lepszego opisania problemu)

Chciałbym uzyskać właśnie taki efekt jak widać na zdjęciach. Tzn. żeby np. wysokość zdjęcia była równa zadanej wysokości przy czy szerokość nie może być mniejsza od zadanej szerokości itp. Ewentualnie można by jakoś wykadrować to zdjęcie, żeby nie wystawało poza zadany obszar ale to już nie jst konieczne, przynajmniej na tą chwilę tak i się wydaje biggrin.gif

Czy istnieje może jakaś gotowa funkcja która takie coś robi? Ewentualnie od czego zacząć i na co zwrócić uwagę? Może koś zna jakąś fajną stronkę na której będą pomocne rzeczy... ale po polsku najlepiej tongue.gif
Kombinowałem coś z imageCopyResampled i jakimiś warunkami ale ciągle wychodzą jakieś głupoty i nie mogę się z tym już połapać :/ Z phpa niestety nie jestem jakiś mocy, podstawy znam ale z GD nie miałem nigdy d czynienia.
cojack
No to przecież to jest proste, jeżeli masz zdjęcie poziome i nie chcesz by było niższe niż dany rozmiar, to ustawiasz ten rozmiar a długość dopasowujesz do tzw ratio, i na odwrót z zdjęciem pionowym.
wookieb
  1. $wysokosc; $szerokosc; // rozmiary zdjęcia
  2. $wysokosc_pozadana; $szerokosc_pozadana; // rozmiar jaki chcesz uzyskać
  3.  
  4. $proporcja_wysokosci = $wysokosc/$wysokosc_pozadana;
  5. $proporcja_szerokosci = $szerokosc/$szerokosc_pozadana;
  6.  
  7. $proporcja_pozadana = min($proporcja_wysokosci, $proporcja_szerokosci);
  8.  
  9. // obliczenie koncowych wartosci
  10. $wysokosc_koncowa = $wysokosc * $proporcja_pozadana;
  11. $szerokosc_koncowa = $szerokosc * $proporcja_pozadana;

Zastąpienie "min" przez "max" daje inne ciekawe rezultaty.
marcinp1984
ok, dzięki smile.gif zaraz się z tym pobawię i jak coś to będe pisał


A czt aby na pewno w powyższym kodzie nie ma żadnego błędu? Bo przeskalowane zdjęcia nie są za bardzo proporcjonalne biggrin.gif No ale nic bawię się z tym dalej

jeszcze może przydało by mi się jedno, odnośnie tego co pisał cojack. Jak prawidłowo wyliczyć to ratio? Bo przeglądam różne stronki i w sumie na każdej wygląda to inaczej i już głupieje tongue.gif Jeśli przy zdjęciu poziomym wysokość minimalna/maksymalna będzie ustawiona na 165 a roziar oryginalnego zdjęcia wynosi 320x240 to jak na tej podstawie prawidło wyliczyć szerokość?
wookieb
Racja pomyliłem się.
To jest właściwy kod
  1. $wysokosc = 200;
  2. $szerokosc = 150; // rozmiary zdjęcia
  3. $wysokosc_pozadana = 100;
  4. $szerokosc_pozadana = 100; // rozmiar jaki chcesz uzyskać
  5.  
  6. $proporcja_wysokosci = $wysokosc/$wysokosc_pozadana;
  7. $proporcja_szerokosci = $szerokosc/$szerokosc_pozadana;
  8.  
  9. $proporcja_pozadana = min($proporcja_wysokosci, $proporcja_szerokosci);
  10.  
  11. // obliczenie koncowych wartosci
  12. $wysokosc_koncowa = round($wysokosc / $proporcja_pozadana);
  13. $szerokosc_koncowa = round($szerokosc / $proporcja_pozadana);
marcinp1984
dzięki niby działa wink.gif


To może jeszcze jedno pytanie... Czy istnieje możliwość wykadrowania tak powstałego zdjęcia? Do wymiarów np 165x124 licząc od środka tego zdjęcia?
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.