LSB圖片隱寫(最低有效位隱寫)
圖片的圖像像素一般都是由RGB三原色(紅綠藍)組成,每一種顏色占8位,取值為0x00~0xFF(十進制0~255),(以0x開始的數據表示16進制)就是256種,一共包含了256的3次方種顏色,即16777216種顏色
但是人類的眼睛只可以分辨大概1000萬種不同的顏色,還有很多種細微的變化人類的眼睛是覺察不到的
而LSB隱寫就是通過修改RGB顏色分量的最低位二進制(LSB),來進行信息的儲存,人類的眼睛並不能感知到前后的變化
每個像素可以攜帶3bit的信息
上圖我們可以看到,十進制的235表示的是綠色,我們修改了在二進制中的最低位,但是顏色看起來依舊沒有變化。我們就可以修改最低位中的信息,實現信息的隱寫。我修改最低有效位的信息的算法就叫做lsb加密算法,提取最低有效位信息的算法叫做lsb解密算法。
再放兩張圖加深下理解:
一個像素可以攜帶3bit的信息
拓展:
圖片在計算機中存儲的方式:
如果將一幅圖像放大,我們可以看到它是由一個個的小格子組成的,每個小格子就是一個色塊。如果我們用不同的數字來表示不同的顏色,圖像就可以表示為一個由數字組成的矩陣(matrix),這樣就可以在計算機中存儲。這個小格子就是像素(pixel),矩陣的行數與列數,就是分辨率(resolution)。
我們常說某張圖像的分辨率是1280*720,指的就是這張圖像是由1280行,720列的像素組成。反過來,如果我們有一個矩陣,將矩陣中的每個數值都轉換為顏色,並在計算機中顯示出來,就可以復現這張圖像
我們可以理解為圖像在計算機中是以點陣的形式存在的,我們可以理解為一個二位數組或者矩陣,每個點所在的行和列是它的坐標,元素的值可以理解為當前像素的值。
可以實現隱寫的原因:
這個原因有很多,但是最重要的還是因為人類的視覺冗余,其實是對相近的像素的敏感度比較低。所以改變部分像素的值不是很明顯的話,肉眼基本察覺到不到。
🔵
【思考】一個像素點是什么顏色?理解彩色圖片構成
RGB彩色圖像中,一種彩色由R(紅色),G(綠色),B(藍色)三原色按比例混合而成。
圖像的基本單元是一個像素,就像一個巨幅電子廣告屏上遠處看是衣服圖像,走近你會看到一個一個的方格,這個方格的顏色是一種,從遠處看,覺察不到這個方格的存在。
一個像素需要3塊表示,分別代表R,G,B,如果8為表示一個顏色,就由0-255區分不同亮度的某種原色。
一張9像素的8位RGB圖像,在計算機內存中的分布大概示意如下:
🟠
圖片的像素和分辨率
對於像素和分辨率這兩個詞,主要見於圖片和顯示設備上。
像素是組成圖象的最基本單元要素:點。分辨率是指在長和寬的兩個方向上各擁有的像素個數。一個像素有多大呢?主要取決於顯示器的分辨率,相同面積不同分辨率的顯示屏,其像素點大小就不相同。
大家都知道線是由無數個點組成的,而面是由無數條線組成,即一個平面是由無數個點所組成。但無論技術多先進發達,人類總是不可能做到一幅圖象由無數個點來構成的境界,只能在長和寬的方向上由有限個點組成而已。
這些有限的點就叫做像素,每一個長度方向上的像素個數乖每一個寬度方向上的像素個數的形式表示,就叫做圖片的分辨率。
如一張640X480的圖片,表示這張圖片在每一個長度的方向上都有640個像素點,而每一個寬度方向上都480個像素點,總數就是640X480=307200(個像素),簡稱30萬像素。
顯然單位面積上像素點越多即像素點越小,這圖片就越清晰細膩。
那這個像素點究竟有多大小呢?單純從圖片來說是不能確定這個點有多大的。這個大小和顯示屏的分辨率息息相關。
🔴
顏色模式中8位,16位,24位,32位色彩是什么意思?
會有什么區別?計算機顏色格式( 8位 16位 24位 32位色)
顏色模式中8位,16位,24位,32位色彩是什么意思?
會有什么區別簡單地說這里說的位數和windows系統顯示器設置中的顏色位數是一樣的。
表示的是能夠顯示出來的顏色的多少。
8位的意思是說,能夠顯示出來的顏色的數量有8位數。16、24都是一樣的。
24位的顏色數量已經很多了,叫做“真彩色”,其實32位和24位顏色數量是一樣多的。32位多出來的8位數是用來表示透明度信息的,所以更加真實。 如果一有一張真彩色的照片,放到一個只有8位的顯示器上的話,顯示出來的效果就會很差。所以當需要的時候你就需要在低位顏色的模式下編輯,讓顏色更好。更詳細的如下:
1 2 (monochrome)
2 4 (CGA)
4 16 (EGA)
8 256 (VGA)
16 65,536 (High Color, XGA)
24 16,777,216 (True Color/真彩色, SVGA)
32 16,777,216 (True Color + Alpha Channel/控制透明度,-游戲特效)
關於256色,早先的一些較為形象的解釋是理解為256個油漆桶/256色調色板,分配給它們編號/索引號。“叫到哪個顏色”哪個顏色就出來填充像素。因為如16色、256色的色彩數有限所以這么解釋很簡單易理解。然而電腦操作過程中必須經過數碼編碼,那么實際上256種顏色對應256個數碼(二進制數值),也就是2^2 * 2^3 * 2^3 = 2^8 = 256。256色模式下電腦沒有必要去按24bit處理,在當時DOS時代,處理8bit色彩比24bit要容易多了。
當然256色中的任意一種顏色都可以用24bit表示,甚至可以用32bit,64bit表示。但是不管如何,24bit模式就意味着 17.7million種顏色。256色模式就意味着256種顏色,或者理解為24bit的17.7million種顏色中的256個顏色。
256色模式: 共8 bits (B: 2 bits; G: 3 bits; R: 3 bits)。
High color:共16 bits (B: 5 bits, G: 6 bits, R: 5 bits)。
True color:一般24bit就是8bit/通道,真彩色。
windows下的32位是R、G、B三個通道各占8位共24位,加上明度通道8位,所以是32位,24位也就是R、G、B三個通道各占6位共18位,加上明度通道6位,所以是24位。
32位色中的24位用來保存顏色信息(R8G8B8),另外的8位用來保存ALPHA信息,ALPHA屬性就是透明度。
24位色也有幾種表示,可以是R5G6B5,也可以是R5G5B5,等等
16位色塊可能會比較少,32比較好點
在顏色數方面,當然很明顯,是2的16次方、24次方和32次方的差別。從人眼的感覺來說,16位色能基本滿足顯示需要,粗看起來和24位色、32位色差不多,仔細點研究的話,會發現在大面積的漸變色中16位色顯示會出現隱約的分隔線。實際應用中,最常用的是24位色,比如網頁和其他地方表示顏色的 “#80FF2E”之類的字符串,用答CDSee看圖片也可以看到大部分圖片的色深是24位。至於32位色,那是在24位基礎上加出來的,據說是加了8位透明色,實際和24位色沒多大差別,至少我們的眼睛是分辨不出來的。
32位色是指我們圖像的rgb各8位,然后再加上z-buffer 8位湊成32位!其中真彩24位就足夠了!然后后面的8位是在3d的顯示中的!
《什么是24位BMP圖片》
24是指圖片顏色的位數,只所以圖片要分顏色的位數,是因為既然圖片以“像素”形式存貯着,就要記錄下來第個“像素”的顏色值,這樣才能在打開圖片時看到存貯的圖片。
記錄每一個像素的顏色值占用的二進制位數,就是BMP圖片的位數,記錄顏色值時又有不同的方法,比如用RGB值,也就是記錄下紅(RED)、綠(GREEN)、藍(BLUE)的顏色值進行混合,還有XRGB、ARGB等等。
比如16位顏色值,可心這樣分:X1位,R5位,G5位,B5位;R5位,G6位,B5位或者是X、R、G、B均4位等等;
24位顏色值稱為“真彩色”,它有着統一的顏色分配:R8位,G8位,B8位;
32位顏色值一般這樣分配:X8位,R8位,G8位,B8位或A8位,R8位,G8位,B8位。
當然還有更多的不同顏色值的圖片,比如1位的,4位的,8位的等等,每種顏色值所用的位數越多,則表現這種顏色深度的精度越高,所有圖像也越逼真,當然圖片的容量也就越大。
在實用美術中,常有"遠看色彩近看花,先看顏色后看花,七分顏色三分花"的說法。
這也就說明,在任何設計中,色彩對視覺的刺激起到第一信息傳達的作用。因此,對色彩的基礎知識的良好掌控,在網頁設計中才能做到游刃有余。
為了使下面的網頁配色分析更易於理解,我們先來了解色彩的RGB模式和HSB模式。
RGB
RGB是表示紅色綠色藍色又稱為三原色光,英文為R(Red)、G(Green)、B(Blue),在電腦中,RGB的所謂"多少"就是指亮度,並使用整數來表示。
通常情況下,RGB各有256級亮度,用數字表示為從0、1、2至255。雖然數字最高是255,但0也是數值之一,因此共256級。按照計算,256 級的RGB色彩總共能組合出約1678萬種色彩,即256×256×256=16777216。通常也被簡稱為1600萬色或千萬色。也稱為24位色(2 的24次方)。
對於單獨的R或G或B而言,當數值為0時,代表這種顏色不發光;如果為255,則該顏色為最高亮度。因此當RGB三種色光都發到最強的亮度,純白的RGB值就為255,255,255。屏幕上黑的RGB值是0,0,0。R,意味着只有紅色存在,且亮度最強,G和B都不發光。因此最紅色的數值是255,0,0。同理,最綠色就是0,255,0;而最藍色就是0,0,255。黃色較特殊,是由紅色加綠色而得就是255,255,0
24bit 和 32bit 是一樣的,由於24bit不能在顯存中對齊,所以不是所有的顯卡都能支持。反而 32bit 因為可對齊,大多數的顯卡都支持(當然顯存要足夠大)。32bit實際上也是24bit,一般都在 MSB 上填充 8bit 的 0 或 alpha (沒有實際效果)。
8位, 16位,24位,32位圖片顯示原理及對比
我們都知道一張圖片可以保存為很多種不同的格式,比如bmp/png/jpeg/gif等等。這個是從文件格式的角度看,我們拋開文件格式,看圖片本身,我們可以分為8位, 16位, 24位, 32位等。
單擊右鍵,屬性->詳細信息即可查看圖片位深度:
8位: 2^8 = 2^2(B) 2^3(G) 2^3(R) = 256 (256色) 可以總共顯示256種顏色
16位:2^16 = 2^5(B) 2^6(G) 2^5(R) = 65536 可以總共顯示65536種顏色
24位:2^24 = 2^8(B) 2^8(G) 2^8(R) = 16777216 可以總共顯示16777216種顏色
32位:Alpha透明度 + 24位
當8/16位深度時,單個原始顏色 (R/G/B)最大只能表示為(0~2^3)/(0~2^6), 無法滿足(0~0xff)的范圍,所以顯示的顏色范圍有限。
當24位深度時,使用24bit顯示一個像素點, 由8bit Red 8bit Green 8bit Blue組合顏色而成,每一個原始顏色(R/G/B)都可以完全顯示(0~0xff),所以24位及以上,我們就叫做真彩色
當32位深度時,與24位相同,可以顯示所有的顏色,同時多了一個透明度值。