这里我有一些代码可以创建一个隐藏另一个图像的图像。 我打印出一些rgb值来查看更改(在实现函数chopToHide和函数移位之后,但我不明白数字已经改变了什么计算)。这段代码是一个较大程序的一部分,用于将一个图像隐藏在另一个图像中(隐写术) 这是我工作的环境:http://www.dukelearntoprogram.com/course1/example/index.php
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *params = @{@"bank_account[country]": @"CA",
@"ubank_account[currency]": @"cad",
@"bank_account[name]":@"Jane Austen",
@"bank_account[account_holder_type]": @"individual",
@"bank_account[routing_number]":@"110000000",
@"bank_account[account_number]": @"000123456789"
};
[manager POST:@"https://api.stripe.com/v1/tokens" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
答案 0 :(得分:0)
此代码正在努力的想法是将每个颜色通道的0..255(8位,#34;字节")的颜色范围缩小到0..15(4位,a&# 34; nybble")两个图片上的每个颜色通道,然后将两个nybbles组合成一个字节。颜色在高nybble中的图片将产生可感知的颜色变化(以16为增量);隐藏在低nybble中的图片会不知不觉地遮蔽主画面像素的颜色。
公式应为:
steganoImageColour = (overtImageColour & 240) | (covertImageColour >> 4)
或等效(但不是那么快):
steganoImageColour = (Math.floor(overtImageColour / 16) * 16) +
Math.floor(covertImageColour / 16)
要提取隐藏图像,您只需将低凹凸处理并将其提升至高位:
reconstructedCovertImageColour = (steganoImageColour & 15) << 4
或等效,
reconstructedCovertImageColour = (steganoImageColour % 16) * 16
例如,如果在公开图像(173 255 47)中有绿黄色像素,而在隐藏图像(135 206 250)中有浅蓝色天空像素,则生成的像素为(168 252 47),仍然非常接近原始的绿黄色,但可以从它重建(128 192 240),这非常接近原始的浅蓝天。
<div style="background-color: rgb(173,255,47)">overt (green-yellow)</div>
<div style="background-color: rgb(135,206,250)">covert (light sky blue)</div>
<div style="background-color: rgb(168,252,47)">stegano (close enough to green-yellow)</div>
<div style="background-color: rgb(128,192,240)">reconstructed covert (close enough to light sky blue)</div>
&#13;