我想知道如何更改像素的最低有效位以隱藏字符。圖片必須保持不變,但我想在其中隱藏一條消息。如何隱藏像素內的字符
0
A
回答
0
爲了讓您的問題更加具體,我們假設您使用的是有限的7位字符集和純RGB圖像(無Alpha通道)。您可以將字符位分成2-2-3組。由於藍色是我們看到的變化最小的通道,因此可以將藍色通道中的3位組隱藏起來。以下的編碼/解碼的例子將使用Color
對象來表示RGB三元組,但代碼應爲任何等效表示工作:
編碼
給定一個像素具有所述圖像中和某些原始值要編碼的字符,與
Color px; // The initial color in the image
char ch; // The character to encode
...
// Store 2,2,3 bits of char in lowest bits of each pixel
// ... & ~0x3 clears the lowest two bits, the or assigns the replacement bits
Color newPx = new Color((px.getRed() & ~0x3) | ((ch & 0x60) >> 5),
(px.getGreen() & ~0x3) | ((ch & 0x18) >> 3),
(px.getBlue() & ~0x7) | (ch & 0x7));
解碼更換
Color px; // The image pixel with an encoded char
...
char ch = ((px.getRed() & 0x3) << 5) |
((px.getGreen() & 0x3) << 3) |
(px.getBlue() & 0x7);
您必須知道圖像的哪一部分包含修改後的像素才能使用。此外,如果您壓縮了它,請確保您的圖像數據是無損壓縮的。
0
要做到這一點,你需要定義一些約定來映射你的位。我們知道,在一個像素的ARGB顏色定義中,8位分配給Alpha,Red,Green和Blue值。因爲你不想將你的角色完全映射到一種顏色上,所以我懷疑你會希望在4個值中的每一個上均勻分解它。你也可能不想編輯這個alpha,但是你可以很容易地調整我提供的代碼來適應這個。這是一個int的結構。記住每個分量的值是8個比特(範圍0-255)
int color = (alpha << 24) | (red << 16) | (green << 8) | blue
這就是說
int blue = color & 0xFF;
int green = (color >> 8) & 0xFF;
int red = (color >> 16) & 0xFF;
int alpha = (color >> 24) & 0xFF;
到字符c的最右邊的兩個比特隱藏到一個組件(紅色,綠色或藍色)使用
component = (component & 0xFC) | (c & 0x3);
爲每種顏色重複並且在每次時間移位c之後兩次;
c >>= 2;
其重新打包爲一個顏色
int color = (alpha << 24) | (red << 16) | (green << 8) | blue;
到解碼,突破回組件
int blue = color & 0xFF;
int green = (color >> 8) & 0xFF;
int red = (color >> 16) & 0xFF;
int alpha = (color >> 24) & 0xFF;
然後構造你的性格
char c = ((alpha & 0x3) << 6) | ((red & 0x3) << 4) | ((green & 0x3) << 2) | (blue & 0x3);
這最後一位假定當你按照我列出的順序(alpha,紅色,綠色,藍色)隱藏組件中的位時。我希望這可以幫助你完成你的工作,可行的隱寫術。
編碼愉快!如果您有任何問題,請留下評論。
相關問題
- 1. 如何隱藏圖像的內容
- 2. 如何隱藏跟蹤像素
- 3. PNG中的隱藏像素
- 4. 隱藏div內的元素
- 5. 隱藏字符
- 6. 隱藏字符
- 7. 如何隱藏像jQuery的
- 8. 如何隱藏內存(RAM)中的敏感字符串?
- 9. 隱藏字符(hangman)
- 10. Php如何隱藏元素
- 11. 如何隱藏svg元素
- 12. 如何隱藏UI元素
- 13. 如何在asp.net內容頁面中隱藏查詢字符串?
- 14. 隱藏鍵入的字符
- 15. 識別隱藏的字符
- 16. 奇怪的隱藏字符
- 17. 隱藏字符串中的字符
- 18. Swift ios只隱藏UIView或隱藏UIView內的元素
- 19. 如何隱藏CPScatterPlot內CPXYGraph
- 20. 隱藏元素點擊隱藏元素
- 21. 如何隱藏字符串中的美元符號後的所有內容JQuery
- 22. 如果包含的內容爲空,如何隱藏元素?
- 23. 如何通過JavaScript取消隱藏隱藏的ASP元素?
- 24. 隱藏文字到圖像
- 25. 隱藏元素內的跨度高度
- 26. 如何隱藏元素的onclick jQuery的
- 27. Zend隱藏的元素:隱藏html值
- 28. 隱藏來自「檢查元素」的隱藏輸入字段
- 29. 我如何修復Safari上的子像素錯誤:隱藏?
- 30. 如何隱藏設計師的元素?
你可以直接使用它們。只是存儲你的數據位 – talex
你能解釋一下怎麼做嗎? 起點: 'bitmap.getPixel(0,0)....?' – astryk
'RGB rgb = bitmap.getPixel(0,0); rgb.R = rgb.R&0xF7 | (data >> 0)& 0x01; bitmap.setPixel(0,0,rgb);'這不是java,而是顯示你的想法。 '(數據>> 0)'中的'0'是您存儲的位數的索引。 – talex