nie jestem pewien, że będziesz w stanie osiągnąć, ponieważ ilość informacji QR Code może pomieścić jest dość ograniczona.
Po pierwsze, prawdopodobnie będziesz chciał zapisać obraz jako surowe bajty, ponieważ inne formaty (numeryczne i alfanumeryczne) są zaprojektowane do przechowywania tekstu/cyfr i zapewniają mniej miejsca na przechowywanie obrazu. Załóżmy, że wybierasz największy możliwy kod QR (wersja 40) z najmniejszym poziomem korekcji błędów, który może pomieścić do 2953 bajtów informacji binarnych (see here).
Pierwsza opcja, jak sugerujesz, zapisuje obraz jako bitmapę. Ten format nie pozwala na żadną kompresję i wymaga (w przypadku obrazu RGB bez kanału alfa) 3 bajtów na piksel. Jeśli weźmiemy pod uwagę rozmiar nagłówka pliku (od 14 do 54 bajtów) i zignorujemy dopełnienie (każdy wiersz danych obrazu musi zostać dopełniony do długości stanowiącej wielokrotność 4), co pozwala zachować około 2900/3 = 966 piksele. Jeśli weźmiemy pod uwagę kwadratowy obraz, reprezentuje on mapę bitową 31x31, która jest mała nawet dla obrazu miniatury (na przykład mój awatar na końcu tego posta ma 32 x 32 piksele).
Druga opcja polega na kodowaniu obrazu za pomocą JPEG. Ten format ma tę zaletę, że używa algorytmu kompresji, który może zmniejszyć rozmiar pliku. Tym razem nie ma dokładnej formuły, aby uzyskać rozmiar obrazu pasującego do 2,9 kB, ale spróbowałem użyć kilku kwadratowych obrazów i zmniejszyć ich rozmiar, dopóki nie zmieszczą się w tym rozmiarze, zachowując dobry (93) współczynnik jakości: daje to średnią około 60x60 pikseli. (Na takich małych obrazach normalne jest, że nie widać niewiarygodnego współczynnika kompresji pomiędzy jpeg i bmp, ponieważ nagłówek pliku w formacie jpeg jest znacznie większy niż w pliku bmp: około 500 bajtów). Jest to lepsze niż bitmapa, ale pozostaje dość małe.
Wreszcie, nawet jeśli uda ci się zakodować kod w tym kodzie QR, napotkasz inny problem: kod QR jest bardzo duży, bardzo trudny do zeskanowania. W rzeczywistości ten kod QR będzie miał wymiary 177x177 modułów ("moduł" będący małym białym lub czarnym kwadratem). Zakładając, że skanujesz go za pomocą smartfona dostarczającego tak zwane ramki "HD" (1280x720 pikseli), każdy moduł będzie miał maksymalny rozmiar na ramce około 4 pikseli. Jeśli weźmiesz pod uwagę hałas kamery, aliasing i rozmycie ze względu na fakt, że użytkownik nigdy nie jest doskonale bezczynny podczas skanowania, jakość ramek wejściowych bardzo utrudni dowolny algorytm dekodowania kodu QR, aby pomyślnie uzyskać kod QR Kod (nie zapominajmy, że ustawiliśmy na niskim poziomie poziom korekcji błędów!).
Mimo że to nie jest dobra wiadomość, mam nadzieję, że ci to pomoże!
Chciałbym zapytać, czy naprawdę chcesz to zrobić. rukowany append nie jest obsługiwany przez prawie żadnego czytnika, a maksymalny rozmiar kodu QR jest praktycznie nieczytelny dla większości urządzeń. Zakoduj prosty hiperlink do obrazu. –