Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php i palety kolorów z corela
Forum PHP.pl > Forum > PHP
vigo
Witam
Mam nadzieję ze jestem w dobrym dziale.
Nie mam pojęcia jak się do tego zabrać, więc przedstawiam mój problem lepszym.
Na stronie, która prezentuje asortyment firmy "x" są zamieszczone jakieś produkty. Powiedzmy, że po kliknięciu na produkt "Y" wyświetlają się szczegółowe informacje. Produkt "Y" jest dostępny w kilkuset kolorach i tu zaczynają się schody. Paleta barw produktu "Y" jest zapisana w pliku "paleta.cpl", mógłbym oczywiście odpalić PHOTO-PAINT, zaimportować paletę, stworzyć mały obrazek i wypełnić kolorem z palety itd. dla każdego koloru z palety. Powstałoby wtedy około 800 plików jpg, nie mówiąc o czasie, jaki to zajmie. Generalnie klapa. Sedno pytania: czy możliwe jest, aby php ( w jakiś magiczny sposób ) tworzyło tabelę na podstawie pliku paleta.cpl i wypełniało komórki odpowiednim kolorem z pliku?
babejsza
ogólnie jest na to szansa, ale musiałbyś gdzieś udostępnić plik żeby to sprawdzić.
vigo
Witam
Dzieki za szybką reakcję. Podaj jakiegoś meila to ci wyśle.
rojmarek
Cytat(vigo @ 3.05.2007, 06:43:15 ) *
Witam
Dzieki za szybką reakcję. Podaj jakiegoś meila to ci wyśle.

moze wrzuc plik na jakis serwer i daj tu link...
vigo
http://www.bodes.pl/pliki/paleta.html
Powinno się pobrać.
Generalnie zrobię jeszcze mały wzór wyświetlania.
Kicok
Kolory zapisane są jako 19, 20 i 21 znak w każdej linii:
  1. <?php
  2.  
  3. function str2color($str) {
  4. return(sprintf('%02X%02X%02X', ord($str[0]), ord($str[1]), ord($str[2])));
  5. }
  6.  
  7.  
  8. $paleta = file('http://bodes.pl/pliki/paleta.cpl');
  9. $colors = array();
  10.  
  11. $c = count($paleta);
  12. for($i=1; $i<$c; $i++) {
  13. $colors[] = str2color(substr($paleta[$i], 18, 3));
  14. }
  15.  
  16.  
  17. echo('<pre>');
  18. print_r($colors);
  19. echo('</pre>');
  20.  
  21. ?>
vigo
Witam
Kodzik fajny.
Produkt "Y" oprócz tego, że posiada kolory to istnieją jeszcze grupy kolorów (grupy kolorów raczej nie stanowią problemu, bo do każdej grupy jest osobna paleta). Chodzi oto, że nazwa (numer) koloru jest powiązany z kolorem (zobacz przykład http://www.bodes.pl/index.php?DepartmentID...mp;ProductID=63 ). Byłoby jeszcze super gdyby można było określać na ilu kolumnach ma być rozpięta tabela. Generalnie, gdy wyświetlę paletę kolorów, musi być ona zaopatrzona w opisy (oryginalne nazwy kolorów z palety). Dzięki za kodzik i czas poświęcony na ten temat.
Kicok
Zamień kod w pętli na:
  1. <?php
  2. $colors[substr($paleta[$i], 6, 4)] = str2color(substr($paleta[$i], 18, 3));
  3. ?>

Będziesz miał wtedy tablicę kolorów o strukturze:
ID_koloru => wartość


Do wyświetlania tego w formie tabeli użyj pętli foreach w mniej więcej taki sposób:
  1. <?php
  2. $ilosc_kolumn = 8;
  3. $i = 0;
  4.  
  5. echo('<table><tr>');
  6. foreach($colors as $id => $color)
  7. {
  8. echo('<td>pole_z_kolorem_i_jego_ID</td>');
  9.  
  10.  
  11. // Zwiększamy zmienną $i z każdym przejściem pętli
  12. $i++;
  13. // Jeśli $i dzieli $ilosc_kolumn bez reszty (czyli w tym rzędzie jest już odpowiednia ilość kolumn)
  14. // to przechodzimy do nowego wiersza
  15. if(($i % $ilosc_kolumn) == 0) {
  16. echo('</tr><tr>');
  17. }
  18. }
  19. // Sprawdzamy ile kolumn w ostatnim wierszu zostało niewypełnionych. Jeśli są jaki
    eś, to tworzymy puste pola
  20. $reszta = $ilosc_kolumn - ($i % $ilosc_kolumn);
  21. if($reszta == 1) {
  22. echo('<td>&nbsp;</td>');
  23. }
  24. elseif($reszta > 1) {
  25. echo('<td colspan="' . $reszta . '">&nbsp;</td>');
  26. }
  27. echo('</tr></table>');
  28. ?>
vigo
Kodzik działa koloruje komórki wyświetla opisy.
Wielkie dzięki.
Ale pojawił się mały problem kolory zapisane w palecie powinny być w RGB, wiec jako wartość koloru podaje odczytaną, nijak się to ma do oryginału.

Witam ponownie.
Do tego doszedł jeszcze jeden problem.
Jeśli nazwa koloru jest inna od "kolor 0040" czyli np. "zielony 040" lub "ananas", wszystko się sypie i nie wyświetla nazw ani kolorów.
Kicok
W takim razie będziesz musiał użyć wyrażeń regularnych, by odczytać kolory z pliku:

  1. <?php
  2.  
  3. function str2color(&$str, $key=null) {
  4. $str = sprintf('%02X%02X%02X', ord($str[0]), ord($str[1]), ord($str[2]));
  5. }
  6.  
  7.  
  8. $colors = array();
  9.  
  10. $paleta = file('http://bodes.pl/pliki/paleta.cpl');
  11. unset($paleta[0]);
  12. $paleta = implode('', $paleta);
  13.  
  14. if(!preg_match_all('/^(.*?)' . chr(5) . '.{7}(.{3}).*$/m', $paleta, $sub)) {
  15. die('Nie mogę odczytać palety kolorów');
  16. }
  17.  
  18.  
  19. array_walk($sub[2], 'str2color');
  20. $colors = array_combine($sub[1], $sub[2]);
  21. unset($sub);
  22.  
  23. ?>




Cytat
Ale pojawił się mały problem kolory zapisane w palecie powinny być w RGB, wiec jako wartość koloru podaje odczytaną, nijak się to ma do oryginału.


To podaj kilka przykładów, to się pomyśli.
vigo
http://www.bodes.pl/pliki/paleta.html
Oto przykład i dalsza część posta.
Kicok
  1. <?php
  2.  
  3. function str2color(&$str, $key=null) {
  4. $str = sprintf('%02X%02X%02X', ord($str[2]), ord($str[1]), ord($str[0])); // little endian
  5. }
  6.  
  7.  
  8. $colors = array();
  9.  
  10. $paleta = implode('', file('plik.cpl'));
  11. if(!preg_match_all('/' . chr(5) . '.' . preg_quote(pack('V', 0)) . '(.{3}).{2}(.*?)(?:' . preg_quote(pack('v', 5)) . '|$)/s', $paleta, $sub)) {
  12. die('Nieznana składnia pliku!');
  13. }
  14.  
  15. array_walk($sub[1], 'str2color');
  16. $colors = array_combine($sub[1], $sub[2]);
  17.  
  18.  
  19. echo('<pre>');
  20. print_r($colors);
  21. echo('</pre>');
  22.  
  23. ?>



Przetestuj ten skrypt. Sprawdź czy odczyta kolory ze wszystkich plików cpl. oraz czy odczytane kolory będą prawidłowe. Skrypt powinien działać dobrze dla plików *.cpl w wersji 9-11: link
vigo
Dzieki za pomoc.
Zaraz go sprawdzę, jakby co jest konkretny przykład: http://www.bodes.pl/pliki/paleta.html


Gościu jesteś wielki
RESPECT FOR YOU
Kolory są ok,nazwy też. To jest to o co chodziło.
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.