![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Hej
zgodnie z tym co napisał manual, do wyciągnięcia poszczegolnych składowy (r,g i ![]() [php:1:9fc999b2f6]<?php $rgb=imagecolorat($im,$x,$y); $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; ?>[/php:1:9fc999b2f6] ale nic z tego nie działa i pokazuje zawsze zero, za wyjątkiem $b - zawsze 86. Czemu? Drugie pytanie: jak przełożyć uzyskane składowe na wartość szesnastkową (do HTMLa)? Próbowałem na różne sposoby z funkcją dechex ale nie wychodziło z tego nic, co by przypominało taką wartość :-) -------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Hej
zgodnie z tym co napisał manual, do wyciągnięcia poszczegolnych składowy (r,g i ![]() [php:1:6cbd11c2da]<?php $rgb=imagecolorat($im,$x,$y); $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; ?>[/php:1:6cbd11c2da] ale nic z tego nie działa i pokazuje zawsze zero, za wyjątkiem $b - zawsze 86. Czemu? Problem występuje gdy tworzysz nowy obrazek za pomocą imagecreate() bądź wczytujesz go z pliku o formacie, który ma indeksowane kolory (np. gif). Wtedy imagecolorat() zwraca Ci indeks tego koloru, a nie faktyczną wartość RGB. Dla plików które przetrzymują kolory w postaci trójki RGB dla każdego piksela lub przy tworzeniu nowego obrazka za pomocą imagecreatetruecolor(), zwracany kolor jest w postaci RGB. Cytat Drugie pytanie: jak przełożyć uzyskane składowe na wartość szesnastkową (do HTMLa)? Próbowałem na różne sposoby z funkcją dechex ale nie wychodziło z tego nic, co by przypominało taką wartość :-)
[php:1:6cbd11c2da]<?php sprintf("#%02x%02x%02x", $r, $g, $ ![]() ?>[/php:1:6cbd11c2da] PS. Podziękowania dla uboottda za pomoc w rozgryzieniu problemu z imagecolorat(). ![]() |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat Problem występuje gdy tworzysz nowy obrazek za pomocą imagecreate() bądź wczytujesz go z pliku o formacie, który ma indeksowane kolory (np. gif). Wtedy imagecolorat() zwraca Ci indeks tego koloru, a nie faktyczną wartość RGB. Dla plików które przetrzymują kolory w postaci trójki RGB dla każdego piksela lub przy tworzeniu nowego obrazka za pomocą imagecreatetruecolor(), zwracany kolor jest w postaci RGB.
Dzięki za odpowiedź. No właśnie obrazek jest tworzony z pliku .png, który (o ile się nie mylę) ma włąśnie indeksowane kolory. BTW: przydałoby się o tym w manualu wspomnieć, bo jest to wg mnie dosyć ważne zastrzeżenie, a tymczasem żadnej takiej notki przy funkcji imagecolorat nie ma. -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Hmm, jednak coś nie działa...
Teraz tworzę obrazek z pliku .jpg i nadal nic - wyświetlana jest tylko ostatnia wartość (czyli niebieski) - tym razem poprawna, tzn. odpowiadająca obrazkowi. A co z resztą? -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Hmm, jednak coś nie działa...
Teraz tworzę obrazek z pliku .jpg i nadal nic - wyświetlana jest tylko ostatnia wartość (czyli niebieski) - tym razem poprawna, tzn. odpowiadająca obrazkowi. A co z resztą? U mnie taki kod: [php:1:8dbd54931f]<?php $im = imagecreatefromjpeg($plik); $rgb = imagecolorat($im, $x, $y); $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; print "$r $g $bn"; ?>[/php:1:8dbd54931f] działa bez zarzutu zwracając poprawne RGB. Robisz to tak samo czy inaczej? |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
No właśne w tym problem... U mnie dokładnie taki sam kod zwraca tylko wartość koloru niebieskiego, pozostałe 2 są takie same i wynoszą 0, niezalżnie od zmiennej $x i $y.
Mam php 4.2.2 -------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat No właśne w tym problem... U mnie dokładnie taki sam kod zwraca tylko wartość koloru niebieskiego, pozostałe 2 są takie same i wynoszą 0, niezalżnie od zmiennej $x i $y.
Mam php 4.2.2 No to niestety nic Ci więcej nie mogę pomóc. U mnie to chodzi na php 4.3.1 z libgd 2.0.12. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat No to niestety nic Ci więcej nie mogę pomóc. U mnie to chodzi na php 4.3.1 z libgd 2.0.12.
I ciekawostka: po zainstalowaniu GD2 problem zniknął.... ![]() Dzięki za zainteresowanie. -------------------- |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 384 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Chorzow Ostrzeżenie: (0%) ![]() ![]() |
Zadna ciekawostka. W manualu stoi jak byk ze imagecolorat zwraca index koloru, chyba ze GD > 2.0 _i_ obrazek jest typu trucolor to wtedy zwraca wartosc RGB zamiast indeksu.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.08.2025 - 16:49 |