logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Raspberry Pi z Apache - Jak przenieść plik gif.h do katalogu var/www?

ienecode 03 Paź 2014 15:13 5349 82
Najlepsze odpowiedzi LABEL_AI_GENERATED

Jak zamienić dane RGB z wyświetlacza na plik JPG i zapisać go w katalogu /var/www, żeby można go było wyświetlić na stronie WWW?

Najprościej nie przenosić pliku `gif.h`, tylko wygenerować z bufora RGB normalny plik graficzny, np. JPG, i zapisać go do `/var/www`; do tego nadaje się libjpeg albo `jpeg-compressor` [#14011650] Przy libjpeg pod Linuxem trzeba użyć poprawnych źródeł `jpegsrc.v6b.tar.gz`, zbudować z nich `libjpeg.a`, dołączyć `jpeglib.h` i linkować program opcją `-ljpeg` [#14046238][#14051538][#14057517] W przykładach `example.c` jest pokazana kompresja obrazu, a cały projekt najlepiej ogarnąć przez Makefile, żeby poprawnie skompilować także biblioteki i pliki `.c` [#14052261][#14061728] Jeśli kiedyś będziesz potrzebował operacji odwrotnej, `read_JPEG_file` z `example.c` wczytuje JPG do nieskompresowanego bufora RGB [#14146989]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
  • #1 14011623
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Witam!

    Zastanawiam się nad pewnym problemem i nie wiem jak go ugryźć.

    Otóż mam Raspberry Pi jako serwer Apache www oraz na GPIO obsłużony wyświetlacz. Chciałbym teraz aby to co napisze na wyświetlaczu w formie tablicy RGB zainportowanej do pliku np. gif.h zostało przeniesione do katalogu var/www i wyświetlone na stronie www.

    Jak się za coś takiego zabrać?

    Za wszelkie wskazówki i podpowiedzi z góry dziękuję.
  • #2 14011650
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    gif.h to chyba nie, bo to plik źródłowy, a ciebie interesuje format, który da się w łatwy sposób wyświetlić na WWW (np. JPEG, PNG). GIF nie - bo płatny.
    Biblioteka do JPEG ( http://libjpeg.sourceforge.net/ ) jest ogólnodostępna (free), więc jedynym problemem jest wygenerowanie z danych zapisanych w pamięci wyświetlacza obrazka i przeniesienie go z odpowiednimi atrybutami jako plik do katalogu serwera WWW.
    Jest też inna biblioteka do tego celu (nie sprawdzałem jej działania): https://code.google.com/p/jpeg-compressor/

    Ale najpierw podziel się informacją - co to za wyświetlacz(Model)?

    Czy wyświetlacz jest "natywnie" obsłużony (widziany jako standardowe urządzenie ekranowe/graficzne w Linux'ie na tym Raspberry)?
    Wtedy możliwe, że wystarczyło by : http://www.raspberrypi-spy.co.uk/2013/10/how-to-take-screenshots-on-the-raspberry-pi/
  • #3 14011664
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Wyświetlacz 7'' SSD1963 z panelem dotykowym.

    Nie robiłem jeszcze odczytu z wyświetlacza, tylko zapis.

    Nie jest obsłużony tak jak mówisz, chyba nie ten poziom :D Mogę rysować na wyświetlaczu dotykiem, rysować figury geometryczne z funkcji oraz wyświetlać bitmapy to wszystko:)

    Czyli jest możliwość odczytania to co na wyświetlaczu (za pomocą linii sterującej RD) i przekonwertowania tego do jpg? Pytam bo nie orientuje się w tych bibliotekach jpg. Dziś wieczorem je przeglądne.
  • #4 14011666
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Damian7546 napisał:
    Nie robiłem jeszcze odczytu z wyświetlacza, tylko zapis.
    Więc jak chcesz odczytać te dane?
  • #5 14011671
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Na razie to tylko przemyślenia. Jest linia sterująca RD więc jest możliwość odczytu. Dzięki za wskazanie drogi z tymi bibliotekami jpg. Jak będę miał problem z ich wykorzystaniem to się odezwę.
  • #6 14032280
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Witam ponownie.

    Czy mógłbyś mi mickpr powiedzieć jak zamienić na obraz jpg za pomocą bibliotek przez ciebie wrzuconych wyżej?

    Z wyświetlacza odczytałem całą jego zawartość (to co wyświetla) w postaci tablicy z elementami 24bitowymi (8R, 8G, 8B), jak tą tablicę zamienić na .jpg?
  • #7 14032291
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Damian7546 napisał:
    Czy mógłbyś mi mickpr powiedzieć jak zamienić na obraz jpg za pomocą bibliotek przez ciebie wrzuconych wyżej?
    W pamięci, czy wprost do pliku?
  • #8 14032558
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Tablica jest w pliku.c....
  • #9 14033021
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Damian7546 napisał:
    Tablica jest w pliku.c....
    Zajrzałeś na stronę https://code.google.com/p/jpeg-compressor/ ?
    Mam ją zacytować?
    Cytat:
    Basic Usage (Compression)

    Include jpge.h and call one of these helper functions in the "jpge" namespace:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    See tga2jpg.cpp for an example usage. This example uses Sean Barrett's stb_image.c module to load image files.

    You can also call the jpge::jpeg_encoder class directly if you need more control over the image source or how/where the output stream is written.
  • #10 14033187
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Jeśli chodzi o parametry num_channels to 3 -RGBA, 4 -RGBA to rozumie, a 1- Y co to?
  • #11 14033235
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Y to luminancja (jasność).
    1-Y - jednobajtowa luminancja (czyli skala szarości 0...255).
  • #12 14033252
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Ok, jeśli chodzi jeszcze o parametr num_channels to elementem ma być liczba 24 bit(RGB), czy może trzeba rozbić na 8 bitowe czyli 8R, 8G, 8B, 8R.... itd. ?

    Ostatnie pytanie. Biblioteka ta jest w c++. Dołączenie takiej biblioteki i potem wywołanie funkcji bool compress_image_to_jpeg_file w moim projekcie napisanym w C będzie działać? Czy są biblioteki w C do jpg?
  • #13 14033289
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Damian7546 napisał:
    jeśli chodzi jeszcze o parametr num_channels to elementem ma być liczba 24 bit(RGB), czy może trzeba rozbić na 8 bitowe czyli 8R, 8G, 8B, 8R.... itd. ?
    Cytat:
    num_channels must be 1 (Y), 3 (RGB), or 4 (RGBA),


    Damian7546 napisał:
    Biblioteka ta jest w c++. Dołączenie takiej biblioteki i potem wywołanie funkcji bool compress_image_to_jpeg_file w moim projekcie napisanym w C będzie działać?
    http://www.parashift.com/c++-faq/c-calls-cpp.html

    Bardziej zaawansowaną jest ta druga biblioteka (w C), w której środku znajdziesz przykład (również w C) - "example.c". Jeśli nie chcesz się babrać w C++, polecam tą drogę.
  • #14 14040839
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    A jeśli w trakcie trwania programu odczytam kolory i zapiszę do tablicy wartości RGB to jak zaraz po tym tablice tą zapisać jako jpg w danym katalogu?
  • #15 14044664
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    mickpr napisał:
    Bardziej zaawansowaną jest ta druga biblioteka (w C), w której środku znajdziesz przykład (również w C) - "example.c". Jeśli nie chcesz się babrać w C++, polecam tą drogę.


    Jest problem z extern "C"{}. Instrukcją tą obejmuję cały plik .cpp i mam błąd : error: template with C linkage w lini:

    template<class T> inline bool put_obj(const T& obj) { return put_buf(&obj, sizeof(T));

    Wie ktoś jak to rozwiązać?
  • #16 14045138
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Damian7546 napisał:
    Jest problem z extern "C"{}. Instrukcją tą obejmuję cały plik .cpp i mam błąd
    Bo extern nie do tego służy. http://4programmers.net/C/Extern
  • #17 14045217
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Znaczenie dla fragmentów kodu

    <justify> Znaczenie zgoła inne niż dotychczas słowo kluczowe extern ma w języku C++ dla objętych specjalnym blokiem fragmentów kodu. Dzięki wspomnianemu blokowi możliwe jest jawne określenie języka nadającego reguły kompilacji dla danego bloku:</justify>
    Kod: text
    Zaloguj się, aby zobaczyć kod

    <justify> Fragment kodu z powyższego przykładu zostanie skompilowany zgodnie z regułami kompilacji języka ANSI C.</justify>


    No ja z tego rozumie że objęcie kodu w C++ extern "C" {kod C++} kompilowany jest jako C, nie tak?
  • #18 14045365
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Damian7546 napisał:
    No ja z tego rozumie że objęcie kodu w C++ extern "C" {kod C++} kompilowany jest jako C, nie tak?
    Ale Ty napisałeś:
    Damian7546 napisał:
    Instrukcją tą obejmuję cały plik .cpp i mam błąd
    Chciałeś po prostu pójść na łatwiznę.
    Pierwsze prawo Murphy'ego mówi - jeśli coś może pójść źle - to pójdzie źle.
    Czemu nie skorzystasz z biblioteki w C, zamiast się męczyć z tą drugą?
  • #19 14045588
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Nie używam biblioteki w C bo nie ma pliku jconfig.h. Pisze że jest on generowany ale nie da się zainstalować tego tak jak jest to napisane w doku install.docx.

    Podając komendę, mam następujące błędy:

    ./configure - Permission denied
    sudo ./configure - Command not found

    make install - No rule to make target 'install'. Stop.

    sh configure - :not found2: configure:
    :not found9: configure:
    :not found22: configure:
    :not found56: configure:
    :not found62: configure:
    configure: 64: configure: Syntax error: Bad for loop variable
  • #20 14045654
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Damian7546 napisał:
    ./configure - Permission denied
    sudo ./configure - Command not found
    Oj kolego, masa nauki przed Tobą.
    W źródłach jest plik configure, wystarczy mu nadać atrybut wykonywalności i ... voila.
    Damian7546 napisał:
    make install - No rule to make target 'install'. Stop.
    To nie zadziała bez wygenerowania poprawnego 'Makefile' przez skrypt 'configure'.

    Tak "by the way" - w jakim środowisku wykonujesz kompilację? Mam nadzieję, że na Linux'ie.
  • #21 14045688
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    BTW - Dopiero się uczę.
    Tak Linux - Raspian.

    Jak nadać atrybut wykonywalności?

    W ten sposób:
    chmod u+rxw configure

    i co dalej?
    ./configure - bad interpreter.
  • #22 14045715
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Damian7546 napisał:
    ./configure - bad interpreter.

    Moim zdaniem powinieneś kompilować na PC w środowisku zgodnym z Raspberry Pi (cross-compiller). Dopiero gotowe elementy wgrywać na Raspian'a (Raspbian'a?).

    http://gnutoolchains.com/raspberry/tutorial/
    http://www.gurucoding.com/en/rpi_cross_compiler/index.php
    http://visualgdb.com/tutorials/raspberry/crosscompiler/
    http://www.raspberry-projects.com/pi/programm.../programming-the-rpi-in-windows-using-eclipse

    Nigdy się w to nie bawiłem na Raspberry. Jedynie kiedyś robiłem projekt na CX24501 (Conexant/NXP/Trident SetTopBox chip) dla pewnego Niemca - gdzie całe środowisko skonfigurowałem na Linux-ie (bo prościej niż na Windows), ale można i na Windows'ie.

    Z pewnością odezwie się jakiś entuzjasta Raspberry - który ma takie środowisko skonfigurowane łącznie z dodatkowymi bibliotekami.
    Jest ktoś taki?

    Dodano po 8 [minuty]:

    Damian7546 napisał:
    ./configure - bad interpreter
    Jaki masz shell na Raspberry?
  • #23 14045772
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Tak jak mówiłem - z Linuxem dopiero zaczynam przygodę. Coś słyszałem o warstwach, ale nie rozumiem pytania - jaki mam shell? ;/

    I po co kompilować na PC w jakimś środowisku - skoro można to robić bezpośrednio na Raspberry? - Nie rozumiem.
  • #24 14045778
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Damian7546 napisał:
    Tak jak mówiłem z linuxem dopiero zaczynam przygodę. Coś słyszałem o warstwach, ale nie rozumie pytania jaki mam shell? ;/
    W DOS/Windows mówią na to "interpreter komend".
    W Windows jest to zazwyczaj CMD.exe, w DOS był 'command.com'.
    W Linux-ie jest wiele odmian tych "interpreterów" -> np. http://en.wikipedia.org/wiki/Unix_shell
    Najbardziej popularny jest Bourne Shell (bash) - do którego prowadzi pierwszy wiersz (#!/bin/sh) skryptu "configure".
    Jeśli na Raspberry PI będzie inny shell - istnieje duże prawdopodobieństwo, że "skrypt diabli wezmą" - co się właśnie chyba dzieje.

    Damian7546 napisał:
    I po co kompilować na PC w jakimś środowisku skoro można to robić bezpośrednio na Raspberry? - Nie rozumie.
    Na Raspberry PI
    - raczej nie zmieścisz całych narzędzi developerskich, wielu bibliotek itd..
    - prędkość kompilacji na PC będzie większa - w porównaniu do R-PI PC to jak Mercedes do Malucha.
  • #25 14045794
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Chyba muszę się wgłębić w temat interpreterów.
    Jeśli chodzi o moje Raspbery po wywołaniu komendy ./configure otrzymuje:

    -bash: ./configure: No such file or directory
  • #26 14045815
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Damian7546 napisał:
    Jeśli chodzi o moje Raspbery po wywołaniu komendy ./configure otrzymuje:
    -bash: ./configure: No such file or directory

    Tą komendę musisz wykonywać będąc w katalogu z plikiem 'configure'. Wygląda na to, że wywołujesz ją z innej lokalizacji.
  • #27 14045832
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Wykonanie komendy w katalogu z plikiem configure:

    Raspberry Pi z Apache - Jak przenieść plik gif.h do katalogu var/www?
  • #28 14045936
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Podaj jeszcze wynik komendy
    Kod: Bash
    Zaloguj się, aby zobaczyć kod
  • #29 14045967
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    mickpr napisał:
    Podaj jeszcze wynik komendy
    Kod: Bash
    Zaloguj się, aby zobaczyć kod
    :

    Raspberry Pi z Apache - Jak przenieść plik gif.h do katalogu var/www?
  • #30 14045980
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Więc zrób (będąc w katalogu /bin) link symboliczny :
    Kod: Bash
    Zaloguj się, aby zobaczyć kod

    (ale tylko, jeśli nie ma takiego pliku w /bin).
    Potem z katalogu z tej biblioteki wywołaj znów
    Kod: Bash
    Zaloguj się, aby zobaczyć kod

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik zadał pytanie dotyczące przeniesienia danych z wyświetlacza podłączonego do Raspberry Pi do katalogu var/www w formie pliku JPEG. W odpowiedziach zasugerowano, aby zamiast pliku gif.h użyć formatu JPEG, ponieważ GIF jest płatny. Użytkownik posiada wyświetlacz 7'' SSD1963, który obsługuje rysowanie i wyświetlanie bitmap. W dyskusji omówiono biblioteki do konwersji danych RGB na JPEG, takie jak libjpeg oraz jpeg-compressor. Użytkownik z powodzeniem odczytał dane z wyświetlacza i zamienił je na tablicę 24-bitową, a następnie na plik JPEG. Pojawiły się również pytania dotyczące kompilacji kodu w C oraz użycia Makefile do zarządzania projektem. W końcu użytkownik uzyskał pomoc w zakresie konwersji tablicy RGB do pliku JPEG oraz odczytu plików JPEG do tablicy RGB.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA