Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Automatycznie zamienianie koloru rgb na hex
Forum PHP.pl > Forum > Przedszkole
mateuszhp
Witam! Napisałem sobie skrypt (Dzięki pomocy kevina z przemo.org) który dla każdego innego usera wyświetla inne dane (statystyki) na obrazku, wszystko jest podpięte pod przema i pobiera mi nazwę grupy lecz w php nie ma kolorów rgb (nie da się użyć w imagettftext) i teraz chciałbym aby automatycznie skrypt który sam przemieniał by kolor rgb i wstawiał swój HEX do mojego skryptu,lecz nie wiem jak to zrobić . Pozdrawiam i proszę o pomoc.
Kamil Pietrzak
budowa hexa wyglada w ten sposob:

  1.  
  2. R G B
  3. XX | XX | XX
  4.  


gdzie XX to 2 cydry w systemie 16
czyli od 0 do f

w ten sposob
  1. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  2. 0 1 2 3 4 5 6 7 8 9 a b c d e f

#luq
Gotową funkcję znajdziesz w manualu winksmiley.jpg
Szukaj.
mateuszhp
w manualu znajdę funkcje która automatycznie sama (ja nawet o tym nie wiem ) zmienia rgb na hex? proszę daj link smile.gif
#luq
Cytat(mateuszhp @ 16.10.2010, 20:05:00 ) *
w manualu znajdę funkcje która automatycznie sama (ja nawet o tym nie wiem ) zmienia rgb na hex? proszę daj link smile.gif

No bez przesady, znajdziesz ją napisaną przez ludzi w komentarzach do standardowej PHP-owej funkcji.
Kwestia wpisania odpowiedniego sformułowania w google.
mateuszhp
LuQ tej funkcji szukam od godz 18 i do tej pory nie mogę znaleźć. Proszę podaj link będę Ci stokrotnie wdzięczny .
flashdev
Cytat(mateuszhp @ 16.10.2010, 20:19:17 ) *
LuQ tej funkcji szukam od godz 18 i do tej pory nie mogę znaleźć. Proszę podaj link będę Ci stokrotnie wdzięczny .


"hex to rgb" -> http://php.net/manual/pl/function.hexdec.php
mateuszhp
byłem tutaj ale nie widzę aby tu był skrypt który sam zmienia
flashdev
Cytat(mateuszhp @ 16.10.2010, 20:30:04 ) *
byłem tutaj ale nie widzę aby tu był skrypt który sam zmienia


Czytałeś komentarze?
mateuszhp
Czytałem i nie mogę znaleźć (mógłbys podać?)
Kamil Pietrzak
to zrob wlasna...
napisalem Ci jaka jest budowa haxa

  1.  
  2. <?
  3.  
  4. function rgb($rgb)
  5. {
  6. $sys16 = array(
  7. 10 => 'a',
  8. 11 => 'b',
  9. 12 => 'c',
  10. 13 => 'd',
  11. 14 => 'e',
  12. 15 => 'f'
  13. );
  14.  
  15. $pierwszyRzad = floor($rgb/16);
  16. $drugiRzad = $rgb-16*floor($rgb/16);
  17.  
  18. if($pierwszyRzad > 9)
  19. {
  20. $pierwszyRzad = $sys16[$pierwszyRzad];
  21. }
  22.  
  23. if($drugiRzad > 9)
  24. {
  25. $drugiRzad = $sys16[$drugiRzad];
  26. }
  27.  
  28. return $pierwszyRzad . $drugiRzad;
  29. }
  30.  
  31. $r = 235;
  32. $g = 91;
  33. $b = 153;
  34.  
  35. $hax = rgb($r) . rgb($g) . rgb($b);
  36. echo $hax;
  37.  


EDIT: zrobilem do g^^
mateuszhp
W tych klockach nie jestem zbyt dobry ;/ Proszę o podanie gotowego skryptu +
Kamil Pietrzak
Dostales gotowa funkcje... przeanalizuj ja
mateuszhp
Przeanalizowałem i wywnioskowałem że to działa tylko na 1 sposób a mi chodzi o to że skrypt będzie pobierał różne wyniki i będzie musiał sam przekorwętować to na hex np dostanie #ff000000 i będzie to musiał zamienić na hex kiedy indziej dostanie #cc000000 i będzie też sam zamienić to na hex
Kamil Pietrzak
co to za zapis #cc000000 ?
przybliz go, to moze cos wymyslimy
#luq
Ale mnie przytłaczacie ludzie,
@flashdev wszystko wyjaśnij i o to też mi chodziło...
flashdev
Ja oczywicie się pomyliłem. Miało być "rgb to hex" a nie odwrotnie.

minuta roboty:
  1. <?php
  2.  
  3. function rgbToHex($r, $g, $b){
  4. return '#' . str_pad(dechex($r << 0x10 | $g << 0x8 | $b), 6, '0', STR_PAD_LEFT);
  5. }
  6.  
  7. echo rgbToHex(255, 255, 255);
  8. echo rgbToHex(0, 0, 0);
mateuszhp
Ej ale to mi zamienia hex na rgb bo gdy użyłem tego (testowo) wynik był taki #ffffff#000000
#luq
Wpisuje w google:
Kod
rgb to hex php manual

Ctrl + F - wpisuje "rgb" i mam:
http://www.php.net/manual/en/function.dechex.php#39755

To jest takie trudne czy...?
flashdev
Cytat(mateuszhp @ 17.10.2010, 09:07:37 ) *
Ej ale to mi zamienia hex na rgb bo gdy użyłem tego (testowo) wynik był taki #ffffff#000000


Napisz na przykładzie co chcesz osiągnąć, bo widzę, że trudno Ci to wyrazić w polskich słowach.
mateuszhp
Chodzi mi oto aby... Mam wynik z bazy w postaci $group_data['group_color']; w group_color jest kolor rgb np #ff000000 i teraz chciałbym skrypt który robi coś w tym stylu function rgbtohex {
$rgb= $group_data['group_color'];

bla bla transformacja na hex i uzyskuję $hex z $rgb rozumiesz? bo $rgb będzie się zmieniać a ja chcę aby kolorowana był napis na obrazku a funkcja imagettftext nie pozwala na kolor rgb tylko hex dlatego muszę zamieniać rgb na hex i wtedy by ładnie było pokolorowane winksmiley.jpg

-----------------------------
EDIT
-----------------------------
Chodzi mi o to żeby uzyskać z podanych rgb hex rozumiesz?
muszę zmienić kolor grupy, który jest zapisany w wersji rgb(?) (#xxxxxx) na kolor w postaci: XXX XXX XXX
flashdev
Cytat(mateuszhp @ 17.10.2010, 11:05:46 ) *


Czyli chodzi Ci o hex to rgb, więc robisz niepotrzebne zamieszanie. Rozwiązanie w tym wątku już się pojawiło.
A na podstawie podanego przez Ciebie przykładu wnioskuję że chodzi tak naprawdę o hex -> rgba, bo masz 32-bitową daną.
Wystarczy lekka modyfikacja skryptu i powinno działać.
mateuszhp
Pojawiły się dwa rozwiązania twoje
Kod
<?php

function rgbToHex($r, $g, $b){
        return '#' . str_pad(dechex($r << 0x10 | $g << 0x8 | $b), 6, '0', STR_PAD_LEFT);
}

echo rgbToHex(255, 255, 255);
echo rgbToHex(0, 0, 0);
i drugie (nie mogę skopiować )

Ale żaden nie jest taki aby gotowy rgb #ffffff zamienił na 255,255,255
pawel81
  1. function convert($r, $g, $b)
  2. {
  3. $arg = func_get_args();
  4. $hex = '#';
  5. foreach ($arg as $val) {
  6.  
  7. if ($val >= 0 && $val <= 255) {
  8. $hex .= ($val <= 15 ? 0 : null) . dechex($val);
  9.  
  10. } else {
  11. $hex = '#FFFFFF';
  12. break;
  13. }
  14. }
  15. return $hex;
  16. }
  17.  
  18. echo convert(2, 25, 255);


Cytat(mateuszhp @ 17.10.2010, 11:56:57 ) *
Ale żaden nie jest taki aby gotowy rgb #ffffff zamienił na 255,255,255


Raczej kolego rgb 255,255,255 zamienił na hex #ffffff

Usun # reszte FFFFFF rozdzel na trzy czesci (FF, FF, FF) i kazda z nich zamien na liczbe dziesietna.
flashdev
Cytat(mateuszhp @ 17.10.2010, 12:56:57 ) *
Pojawiły się dwa rozwiązania twoje
Kod
<?php

function rgbToHex($r, $g, $b){
        return '#' . str_pad(dechex($r << 0x10 | $g << 0x8 | $b), 6, '0', STR_PAD_LEFT);
}

echo rgbToHex(255, 255, 255);
echo rgbToHex(0, 0, 0);
i drugie (nie mogę skopiować )

Ale żaden nie jest taki aby gotowy rgb #ffffff zamienił na 255,255,255


http://www.php.net/manual/en/function.hexdec.php#99478 a to? Piszesz, że czytałeś komentarze...
mateuszhp
Nic mi się nie pokazuje sad.gif Sprawdzałem to ale nic mi się nie pokazuje :-E
flashdev
Cytat(mateuszhp @ 17.10.2010, 14:38:37 ) *
Nic mi się nie pokazuje sad.gif Sprawdzałem to ale nic mi się nie pokazuje :-E


var_dump
mateuszhp
Ale co mam wziąć w var_dump i przypominam że ja muszę to wyświetlić na obrazku
pawel81
  1. function hexToRGB($hex)
  2. {
  3. preg_match('/([0-9A-F]{2})([0-9A-f]{2})([0-9A-f]{2})/i', $hex, $rgb);
  4. array_shift ($rgb);
  5.  
  6. foreach ($rgb as & $value) {
  7. $value = hexdec($value);
  8. }
  9. unset($value);
  10.  
  11. return $rgb;
  12. }
  13.  
  14. print_r(hexToRGB('#FFFFFF'));


Wynik zwracany jest w tablicy!
mateuszhp
Pokazuje się
Kod
Array ( [0] => 255 [1] => 0 [2] => 0 )
Czyli już zamienia tylko chciałbym aby to wyświetlało tak
Kod
255,0,0
wg przykładu który dałem teraz, + dla Pawła za pomoc tylko chciałbym aby teraz działało to w ten sposób jak powiedziałem.
flashdev
  1. implode(Array( 0 => 255, 1 => 0, 2 => 0 ), ',');
mateuszhp
Nie działa... Proszę o inne propozycje
pawel81
Poprawione smile.gif

  1. function hexToRGB($hex)
  2. {
  3. preg_match('/([0-9A-F]{2})([0-9A-f]{2})([0-9A-f]{2})/i', $hex, $rgb);
  4. array_shift ($rgb);
  5.  
  6. foreach ($rgb as & $value) {
  7. $value = hexdec($value);
  8. }
  9. unset($value);
  10.  
  11. return "{$rgb[0]}, {$rgb[1]}, {$rgb[2]}";
  12. }
  13. echo hexToRGB('#FFFFFF');
Crozin
Przepraszam, ale jak przeczytałem całość wątku musiałem napisać:

Cytat
Nie działa... Proszę o inne propozycje
Zastanawiam się czy jesteś bezczelny do granic możliwości czy po prostu jesteś idiotą. Tak trudno zobaczyć w manualu, że kolejność argumentów dla tej funkcji jest odwrotna? Tak ciężko: http://pl.php.net/manual/en/function.implode.php
@pawel81: za chwile napisze, że nie chce spacji pomiędzy przecinkami i liczbami, też będziesz gościowi w nieskończoność poprawiać?
mateuszhp
Crozin jakbyś był zielony w php to też byś tak robił. Paweł wszystkie twoje posty w tym temacie są nagrodzone + Flash tobie też się należy + Wszystko działa!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.