![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie,
opiszę pokrótce swoją sytuację: - przesyłam z poziomu klienta opis obrazka do PHP w formie ciągu hexowych opisów koloru kolejnych pixeli (np. fffdf8.ffffff.ffffff.ffffff.fefcf3 etc) - ponieważ danych jest dużo, zaimplementowałem po stronie klienta prostą kompresję w rodzaju RLE, tzn. jeśli 3 kolejnych pixele mają taki sam kolor - powiedzmy ffffff, zapisuję to jako 3xffffff (przykładowy ciąg wygląda więc tak: fffdf8.3xffffff.fefcf3) - żeby 'rozpakować' to po stronie serwera, używam następującej funkcji:
i tu pojawia się problem... $multiplier (czyli n z nxffffff) po skonwertowaniu do int zawsze ma wartość zero! (jeśli jednak wypiszę go jako string, ma poprawną wartość n) nie mam pojęcia, dlaczego tak się dzieje, próbowałem też z intval(), ale to nie pomogło. nie jest to też na pewno problem danych przesyłanych od klienta, bo testowałem to również z wartością $dataset wpisaną do skryptu. będę bardzo wdzięczny za wszelką pomoc. gdyby ktoś chciał potestować, poniżej uproszczony kod zaznaczający problem.
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 229 Pomógł: 0 Dołączył: 29.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
jak na moje to regularkę masz nie do końca prawidłową... bo nx albo masz albo nie masz... a w regularce zawsze ma być... dlatego większości nie wychwytuję, ale mogę się mylić na ereg'ach się nie znam
![]() ![]() poza tym jest taka funkcja jak str_repeat" title="Zobacz w manualu PHP" target="_manual dlatego też proponuję:
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
Wyrażenie było prawie dobre, bo z założenia miało zamieniać tylko te kolory, przed którymi znajduje się [0-9]+x
Tyle że ereg_replace nie za bardzo chce współpracować z funkcjami, więc trzeba użyć preg_replace z modyfikatorem "e":
Ten post edytował Kicok 4.06.2007, 08:38:48 -------------------- "Sumienie mam czyste, bo nieużywane."
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
zimi i Kicok, wielkie dzięki! bardzo mi pomogliście.
swoją drogą, musiałem jakoś przegapić str_replace, dobrze wiedzieć, że istnieje :) |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 16:58 |