我正在研究图像加密和解密算法。我想让图像像素失真。我想要得到每个像素值,然后按我想要的方式对这些像素值进行排序,这样图像的像素就会失真,图像就会改变。我是在朝礼仪方向走吗?有什么提示吗?或者是能帮到我的算法示例。
Idea:我有一张10*10像素的图像。这意味着图像由100像素组成。如果我选择图像的第一个像素行,它是10像素,我将这些像素转换为二进制,然后转换为十进制。现在我得到了10个十进制值的像素。我以我想要的方式对这些值进行排序。现在将十进制值转换为二进制值,并将转换为像素。第一行的图像像素现在已失真。
发布于 2015-03-09 20:42:40
我不会再认为这是“图像”了。
基本上,您有一个"0-255“数字数组,并且您希望隐藏它们的值和顺序。唯一的限制是您希望保持值的范围(0-255)和计数-因此您不能使用通用算法,因为它们也会更改...
我建议做一些混洗,然后按某种模式改变值。它很容易实现,而且图片将无法识别。
还要记住,密码应该是定义图片修改方式的参数。
发布于 2015-03-09 21:05:54
有很多方法可以做到这一点。一种简单的方法:
您可以直接使用像素的字节数组。但是,为了说明,下面的示例使用图像处理框架单独访问像素。代码在任何意义上都不会更改图像。它只是说明了如何访问和设置像素值。
// Loading an image
MarvinImage image = MarvinImageIO.loadImage("image.png");
for (int x = 0; x < image.getWidth(); x++) {
for (int y = 0; y < image.getHeight(); y++) {
// 2. Accessing pixel at x,y
int red = image.getIntComponent0(x, y);
int green = image.getIntComponent1(x, y);
int blue = image.getIntComponent2(x, y);
// 3. Setting values back to pixel at x,y
image.setIntColor(x,y,red,green,blue);
}
}
// 4. Saving image
MarvinImageIO.saveImage(image, "image_out.png");警告:不使用像JPEG这样的压缩图像格式。它们会稍微改变像素值,因此您无法取回这些值。尝试使用像PNG这样的格式。
https://stackoverflow.com/questions/28942069
复制相似问题