![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 367 Pomógł: 10 Dołączył: 20.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Potrzebuje kilka wzorów na obliczanie szerokości i wysokości obrazu.
1. Obliczanie ratio zdjęcia po podaniu wysokości i szerokości zdjęcia 2. Mam zdefiniowane ratio, podaną wysokość i szerokość zdjęcia. Chcę uciąć zdjęcie jeśli ratio zdjęcia jest inne niż zdefiniowane ratio a) Ucinam wysokość, szerokość zostaje taka sama, tak żeby ratio zgadzało się ze zdefiniowanym ratio B) Ucinam szerokość, wysokość zostaje taka sama, tak żeby ratio zgadzało się ze zdefiniowanym ratio c) Ucinam szerokość i wysokość, tak żeby ratio zgadzało się ze zdefiniowanym ratio Pomocy :-) Ten post edytował eai 13.06.2007, 17:39:32 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
To zbyt złożone zdania żebym je mógł przetworzyć. Ale moze wystarczy jak dam Ci radę. Narysuj to sobie na kartce a wszystko stanie się jasne. A jak nie to użyj układu równań. Mi pomogło kiedy robiłem skalowanie i ucinanie. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
cheers. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 367 Pomógł: 10 Dołączył: 20.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
OK. Pierwsze mam. Trzeba obliczyć najmniejszy wspólny dzielnik i podzielić te liczby. Algorytm Euklidesa.
Kod 800x600 Ratio: 4:3 1024x768 Ratio: 4:3 560x228 Ratio: 140:57 Ale z resztą pomóżcie. Ten post edytował eai 13.06.2007, 18:06:55 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1c) dane ratio np: 4x-3y. wysokosc i szerokosc np 100x 100y. Calosc sklada sie z 4 czesci (bo wieksza liczba ratio to 4) teraz wiem ze 4z 4 to 100% wiec 100x nie musze skracac. 3/4 to 75% wiec szerokosc ucinam 100y=>3/4*100y=3/4*100y (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Kod if (x.ratio > y.ratio){ x=x; }else{ x= x.ratio/y.ratio*x; } if (y.ratio > x.ratio){ y=y; }else{ y= y.ratio/x.ratio*y; } I tak bedziesz musiał to przeanalizować ale moze Cie to naprowadzi chociaż (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Kurde - w końcu 16 lat nauki matematyki na coś mi sie przydały (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Właśnie się zorientowałem ze w zadaniu jest "ucinam" a nie zmniejszam. Znając docelową szerość mozesz teraz łatwo odciąć boki: ucięciepolewej = (stary.x - nowy.x) /2; ucieciepoprawej = ucieciepolewej. Ten post edytował Black-Berry 13.06.2007, 18:05:50 |
|
|
![]()
Post
#5
|
|
Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Ale ratio to przecież zwykły ułamek... Więc jak najbardziej:
x/y = ratio => x = y*ratio i y = x/ratio Jeżeli ratio obrazka jest większe od oczekiwanego, to znaczy, że jest za szeroki. Jeżeli mniejsze, to za wysoki. Obliczasz szerokość/wysokość z podanych wyrażeń. Jak chcesz uciąć kawałek ze środka, to robisz to tak jak napisał Black-Berry. Szerokość starego minus szerokość nowego i to dzielone przez 2. Tyle musisz obciąć z lewej i z prawej. A jeżeli chcesz być w 100% dokładny (w końcu na liczbach naturalnych operujemy...), to mój pomysł na algorytm przycinania jest taki: Porównujesz ratio z oczekiwanym. Jeżeli jest większe to: Sprawdzasz, czy wysokość obrazka dzieli się przez mianownik ratio. Jeżeli tak, to zostawiasz ją w spokoju i ucinasz tylko na szerokość. Jeżeli nie, to liczysz nową wysokość (stara wysokość - (stara wysokość modulo mianownik ratio). Na podstawie nowej wysokości i oczekiwanego ratio liczysz szerokość. Jeżeli ratio jest mniejsze, to na odwrót (zamieniasz wysokość z szerokością i mianownik z licznikiem). Do wszystkiego pasują te wzory, które podałem. Ten post edytował Ludvik 13.06.2007, 18:27:29 |
|
|
![]() ![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 367 Pomógł: 10 Dołączył: 20.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki wielkie za wskazówki
It Work's ;-) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 29.09.2025 - 06:52 |