![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 9.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
szukam i szukam i nie mogę się doszukać, postanowiłem więc zasięgnąć tu pomocy. Otóż potrzebuję szybko sprawdzić w php i javascript czy zdjecie wgrywane na serwer jest czarnobiałe czy kolorowe. Próbowałem kilku funkcji z rodziny image.. - imagecolorexact - imagecolorstotal itp. Nic nie udało mi się osiągnąć. Czy macie jakieś doświadczenie w tym temacie? Z góry dziękuję za pomoc. Włodek. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 202 Pomógł: 117 Dołączył: 13.04.2007 Skąd: 127.0.0.1 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Nie wiem czy to najlepsze rozwiązanie (w zasadzie wiem, że nie), ale... Możesz lecieć po kolei po wszystkich pikselach i sprawdzać czy R == G == B. Jeśli nie to zdjęcie jest kolorowe ![]() Pozdrawiam! -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 9.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
To ciekawe, nie wiem na ile wydajne, ale jeśli nie ma innej szybszej metody to przetestuję tą. Ew. może by szybko z resizować obrazek do np. 100x100 i wykonać te czynności na miniaturce? Jeśli obrazek ma np. rozdz. 800x600 to już się robi prawie pół miliona operacji....
Na pewno musi istnieć jakaś szybka metoda ![]() Pozdrawiam, Włodek. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Co masz na myśli pod pojęciem "czarno-białe"? Że faktycznie ma ono tylko te dwa kolory, czy może jeszcze odcienie szarości? Jeśli to pierwsze to Masz tylko 2 kolory w całym obrazie. Jeśli to drugie to maksymalnie 256, przy czym ich rozkład jako RGB jest taki jak wspomniany przez ayeo. Skala szarości charakteryzuje się bowiem tym, że wszystkie składowe koloru mają tę samą wartość. Możesz więc nawet, jeśli chcesz, na podstawie analizy kolorów obrazu łatwo zbudować histogram dzięki temu.
-------------------- 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
#5
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 3 Dołączył: 14.12.2006 Skąd: /usr/bin/php Ostrzeżenie: (0%) ![]() ![]() |
Powinienieś zainteresować się funkcjami Imagick::getImageColorspace ( ewentualnie Imagick::getImageDepth)
może zwrócić:
ciebie interesuje nr.2 |
|
|
![]()
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 ![]() |
Woodzu, jest tylko jedno ALE. Nawet jeśli obraz będzie w skali szarości, ale zapisany jako RGBColorspace to i tak pokaże mu w wyniku 1, a nie 2 zapewne
![]() -------------------- 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: 37 Pomógł: 3 Dołączył: 14.12.2006 Skąd: /usr/bin/php Ostrzeżenie: (0%) ![]() ![]() |
ok racja, w sumie można tego użyć tylko na wstępie żeby niepotrzebnie nie wywołać iteracji po pikselach kiedy zdjęcie jest i tak monochromem, odciążymy tym trochę CPU, jesli zwróci fase wtedy np. sprawdzania ok 20 losowych pikseli
co wy na to? przykład na: http://www.php.net/manual/en/function.imagecolorat.php#71444 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Można robić losowe piksele, ale ich liczba musi być większa niż 20, bo a nuż będziesz miał pecha i trafisz dokładnie w 20 o skali szarości. W każdym razie sprawdzenie monochroma na starcie głupim pomysłem nie jest, o ile ma się magika jako rozszerzenie zainstalowane
![]() -------------------- 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
#9
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 3 Dołączył: 14.12.2006 Skąd: /usr/bin/php Ostrzeżenie: (0%) ![]() ![]() |
widziałem kiedyś funkcje w C++, która robi dokładnie to o co kolega pytał... bede miał troche czasu to poszperam jeszcze
edit. znajdę ją jeżeli ktoś będzie zainteresowany żeby sobie napisać taki program w C++ na razie znalazłem gotowe rozwiązanie które używa GDLib http://www.roseindia.net/tutorial/php/phpg...sgrayscale.html Ten post edytował woodzu 10.03.2010, 16:53:25 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 9.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam i dziękuję wszystkim za pomoc.
Potestowałem ten skrypt http://www.roseindia.net/tutorial/php/phpg...sgrayscale.html i działa bardzo dobrze. Wykrywa zdjęcia kolorowe i czarnobiałe tj. w skali szarości. Zbyt duże pliki (nie wiem, dokładnie gdzie jest granica, ale dostałem błąd dla pliku 300KB) nie są procesowane ze względu na brak pamięci dla usera serwera php. Poradziłem sobie tak, że robię resize w locie i wykonuje skrypt dla zdjęć pomniejszonych. Działa pięknie. Przykład dla zdjęcia 2,8MB: The image is grayscale. Executed in 0.550637960434 seconds Taki performance mi jak najbardziej odpowiada ![]() Pozdrawiam, Włodek. |
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
No przecież to dokładnie to co jest w jednym z pierwszych postów
![]() ![]() -------------------- 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
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 06:50 |