Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 544 Pomógł: 5 Dołączył: 18.08.2009 Ostrzeżenie: (0%)
|
Witam,
Kombinuję i kombinuję jak obciąć zdjęcie przy pomocy GD2. Szukałem na anglojęzycznych forach (bo na polskich to raczej nic nie znalazłem) i była tam mowa tylko o imagecopyresampled. Próbowałem coś z tym kombinować ale generalnie efekt był taki że mimo braku błędów nic się nie działo. Mam oczywiście oryginalny wymiar obrazka, wymiary każdego z punktów (x1, y1, x2, y2), oraz szerokość i wysokość pola które ma zostać zachowane. Macie pomysł? Pozdrawiam -------------------- |
|
|
|
![]() |
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
Zobacz jakie parametry przyjmuje imagecopyresampled , potem pokaż jak kombinowałeś
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 544 Pomógł: 5 Dołączył: 18.08.2009 Ostrzeżenie: (0%)
|
Właśnie nie do końca rozumiem parametry imagecopyresampled. Ogólnie kombinowałem dużo. Aktualnie mam takie coś:
Teraz niby obcina obraz od punktu x1 i y1 (czyli lewy góry punkt) ale potem już nic. Poza tym tworzy nowe wymiary obrazka, bierze je z kosmosu bo nie są to ani oryginalne ani te z obszary który ma być zachowany. -------------------- |
|
|
|
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
|
|
|
|
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 561 Pomógł: 72 Dołączył: 15.11.2006 Ostrzeżenie: (0%)
|
Nie bierze ich z kosmosu tylko z $w i $h, wyświetl sobie po kolei wszystkie zmienne i zobacz dokładnie co zawierają i czy zawierają to co powinny zawierać.
-------------------- Nawet świnka może wejść na drzewo kiedy jest chwalona :)
|
|
|
|
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
To czytaj dokładnie opis parametrów z manuala. Poza tym zwróć uwagę jakiej funkcji używasz. Czy chcesz skopiować kawałek obrazka czy skopiować i przeskalować. Bo od tego są 3 różne funkcje (do 2 przypadku są 2 funkcje). I pamiętaj, że w GD liczenie współrzędnych obrazu jest od lewego górnego rogu! czyli współrzędne 20, 50 oznaczają, że obiekt w obrazie ma być 20px na lewo i 50px w dół od lewego górnego.
imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h ) - kopiuje wybrany fragment pliku źródłowego do wynikowego, resource $dst_im - wskaźnik na obiekt wynikowy, resource $src_im - wskaźnik na obiekt źródłowy, int $dst_x - odległość od lewej w obrazie wynikowym gdzie ma być lewy górny róg kopiowanego obrazka, int $dst_y - odległość od góry w obrazie wynikowym gdzie ma być lewy górny róg kopiowanego obrazka, int $src_x - odległość od lewej w obrazie źródłowym kopiowanego fragmentu, int $src_y - odległość od góry w obrazie źródłowym kopiowanego fragmentu, int $src_w - szerokość kopiowanego fragmentu, int $src_h - wysokość kopiowanego fragmentu. bool imagecopyresized ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h ) - kopiuje fragment ze źródłowego, ale dodatkowo skaluje go do odpowiedniego rozmiaru w pliku źródłowym. int $dst_w - szerokość fragmentu w pliku docelowym, int $dst_h - wysokość fragmentu w pliku docelowym bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h ) - kopiuje fragment ze źródłowego, ale dodatkowo skaluje go do odpowiedniego rozmiaru w pliku źródłowym. Różnica między 2 i 3 będzie widoczna w jakości obrazka. Zwykły resize w przypadku bogatych kolorystycznie w większości spowoduje pogorszenie ich jakości. Resampling kolorów w pewien sposób tę wadę niweluje, choć nie łudź się, że poprawisz znacząco jakość. Najlepiej sam sprawdź działanie obu na jakimś zdjęciu. innymi słowy dostajesz wybór: szybki resize, albo dokładniejszy resampling. Przykład Twojego przykładu funkcji z opisem brzmiałby:
Z pliku źródłowego $img wyciągnij fragment zaczynający się x1 od lewej krawędzi i y1 od górnej krawędzi i mający szerokość $info[0] oraz wysokość $info[1]. Teraz weź go resampluj do szerokości $w i wysokości $h oraz umieść w obiekcie docelowym $th na pozycji 0 pikseli od lewej krawędzi i 0 pikseli od górnej krawędzi (czyli de facto w lewym górnym rogu). Jeśli więc skopcisz parametry to logiczne, że będziesz miał cuda na obrazku EDIT: A teraz zagadka... Skoro pobierasz sobie z pliku źródłowego o dajmy szerokości i wysokości 600x400 fragment, który zaczyna się w 50, 20 i ma mieć szerokość 600x400 (w końcu to rozmiary oryginału a tak zadeklarowałeś w funkcji resamplującej!) to obraz w "schowku" ma wielkość 600x400 czy może 550x380 (600-50x400-20) Ten post edytował thek 4.09.2009, 11:46:44 -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 544 Pomógł: 5 Dołączył: 18.08.2009 Ostrzeżenie: (0%)
|
A czytałeś tutaj: http://pl.php.net/manual/pl/function.imagecopyresampled.php Czytałem ale tak jak pisałem nie do końca wiem wszystko. Był pewien problem ze skryptem któy przechwytywał x1, y1 itp. ale już jest poprawiony i dobrze wyświetla dane. Niestety dalej jest błąd w przycinaniu. Tworzy już obraz o dobrych rozmiarach ale wygląda to tak: Rozmiar obrazka jest dobry, tylko czarnego obszaru nie powinno tam być, natomiast ten kolorowy powinien być rozciągnięty na całość Dzięki, przeanalizowałem twój post i doszedłem do wniosku że powinno być tak
I działa jak należy Ten post edytował deha21 4.09.2009, 11:53:44 -------------------- |
|
|
|
![]() ![]() |
|
Aktualny czas: 20.08.2025 - 01:53 |