Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript rgb值通过什么计算进行更改?_Javascript_Binary_Hex_Decimal_Steganography - Fatal编程技术网

Javascript rgb值通过什么计算进行更改?

Javascript rgb值通过什么计算进行更改?,javascript,binary,hex,decimal,steganography,Javascript,Binary,Hex,Decimal,Steganography,这里我有一些代码,它创建了一个隐藏另一个图像的图像。 我打印出一些rgb值以查看更改(在实现函数chopToHide和函数shift后,但我不明白数字是通过什么计算更改的)。这段代码是一个较大的程序的一部分,用于将一个图像隐藏在另一个图像中(隐写术)。 这就是我工作的环境: var start=newsimplemage(“astrachan.jpg”); var hide=新的SimpleImage(“duvall.jpg”); 打印(开始); 打印(隐藏); 打印(“astrachan图片的

这里我有一些代码,它创建了一个隐藏另一个图像的图像。 我打印出一些rgb值以查看更改(在实现函数chopToHide和函数shift后,但我不明白数字是通过什么计算更改的)。这段代码是一个较大的程序的一部分,用于将一个图像隐藏在另一个图像中(隐写术)。
这就是我工作的环境:

var start=newsimplemage(“astrachan.jpg”);
var hide=新的SimpleImage(“duvall.jpg”);
打印(开始);
打印(隐藏);
打印(“astrachan图片的宽度和高度”);
打印(start.getHeight(),start.getWidth());
打印(“duvall图片的宽度和高度”)
打印(hide.getHeight(),hide.getWidth());
var cropWidth=start.getWidth();
if(hide.getWidth()对于(i=1;i这段代码的目标是将两幅图片上每个颜色通道的颜色范围从0..255(8位,一个“字节”)减少到0..15(4位,一个“Nyble”),然后将两个Nyble组合成一个字节。颜色处于高Nyble的图片将产生可感知的颜色变化(以16为增量);隐藏在低Nyble中的图片将对主图片像素的颜色进行不知不觉的着色

公式应为:

steganoImageColour = (overtImageColour & 240) | (covertImageColour >> 4)
或同等地(但不是那么快):

要提取隐藏图像,只需使用低Nyble并将其提升为高:

reconstructedCovertImageColour = (steganoImageColour & 15) << 4
例如,如果在公开图像(17325547)中有一个绿黄色像素,在隐蔽图像(135206250)中有一个浅天蓝色像素,则生成的像素是(16825247),它仍然非常接近原始绿黄色,但可以从中重建(128192240),这非常接近原始的浅天蓝色

overt(绿-黄)
隐蔽(浅天蓝色)
隐写术(接近绿黄色)

重建的covert(足够接近淡天蓝)
ReconstructedCovertImageColor=(隐写图像颜色%16)*16百分号的作用是什么?您是如何得出的(128192240)对于重建的值?我不知道%16是什么…
168%16
8
,因为
160
可以被
16
整除,而
8
是额外的。但是168%16是0.5。0.5*16不是128。我在这里感到困惑。
0.5
?你从哪里得到
0.5
10
,剩下
8
。因此,
168%16
8
…不是
0.5
steganoImageColour = (Math.floor(overtImageColour / 16) * 16) +
                     Math.floor(covertImageColour / 16)
reconstructedCovertImageColour = (steganoImageColour & 15) << 4
reconstructedCovertImageColour = (steganoImageColour % 16) * 16