java - Java 编码图像解码输出中出现奇怪的 Ascii 字符

标签 java image encoding steganography

我正在编写一个图像加密程序,在其中对图像内的字符串进行编码。

我正在处理 .png 图像。

编码通过以下步骤执行:

  • 图像的像素使用 getRGB() 存储在二维数组中。
  • 字符串中的每个字符都会转换为二进制形式并存储在数组中。
  • 4byte像素的每个字节的LSB根据字符的二进制形式的每一位而改变。第一个字节的 LSB 在第 0 位,第二个字节的 LSB 在第 8 位,第三个字节在第 16 位,第四个字节在第 24 位。
  • 编码后,使用setRGB()方法将修改后的像素写入原始图像。

解码:

  • 使用 getRGB() 读取图像的像素;
  • 采用相反的编码方法来检索数据。
  • 每第 8 位之后,包含解码位的 int 就会转换为字符。然后用零初始化另一个字符。

                if((pixels[i][j] & change)==1)  
                {
                    tempText|=1 ;
                }
    
                tempText<<=1;
    

其中变化为 1,256,65536,16777216,具体取决于迭代。其中第0、8、16、24位都是1。

代码编译良好。但解码后,我在输出中得到奇怪的 ascii 字符。我找不到这其中的原因。所以我在这里咨询专家。

最佳答案

(对于评论来说太长了)

你写道:

int 变化=0;

                            for(int k=0;k<4;k++)
                            {
                                    if(k==0)
                                    {
                                            change=1;
                                    }
                                    else
                                            if(k==1)
                                            {
                                                    change=256;
                                            }
                                            else
                                                    if(k==2)
                                                    {
                                                            change=65536;
                                                    }
                                                    else
                                                            if(k==3)
                                                            {
                                                                    change = 16777216;
                                                            }

里面有很多重复。通常,计算机非常擅长消除重复。

如果我没有被这句话弄错的话,这可以重写:

final int change = 1 << 8 * k;

关于java - Java 编码图像解码输出中出现奇怪的 Ascii 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14427196/

相关文章:

jQuery:在 WebKit(Chrome/Safari) 中使用带有 anchor 链接的 Append()

java - 如何使用 jbutton 将 jlabel 的图标设置为背景图像?

python - 已弃用的 scipy imresize() 函数的替代品?

html css 图像与更多图像

python - 如何在 python 中解码来自 Facebook 的 JSON unicode 转义条目?

php - 将重音符号转换为 HTML,但忽略标签

java - 如何使用 PageObject 模式改进我的测试?

java - Android Studio : add a custom jar as dependency

java - Spring boot - 使用 Logback 发送电子邮件

c# - 在 Asp.Net C# 中如何获取图像(作为 Base64 编码字符串传入)并将其保存到服务器?