如何更改图像中每个像素的最后一位并将其另存为新图像?

How to change the last bit of every pixel in Image and save it as a New Image?

我目前在隐写术项目工作,我是初学者。

我在Python中开发了以下代码来补充所有像素的最后一位并将结果图像保存为新图像说:Output.jpg

在我使用 img.save() 函数保存图像之前,代码中的一切工作正常:当我重新打开同一图像时,像素保持不变。

我打算在这个项目中使用 Java。

from PIL import Image
img=Image.open("P:\Input.jpg")
img=img.convert("RGB")
width,height=img.size
pix=img.load()
for i in range(width):
   for j in range(height):
       r,g,b=pix[i,j]
       bin_b=bin(b)
       bin_list=list(bin_b)
       if bin_list[-1] == 0:
          bin_list[-1]=1
       else:
          bin_list[-1]=0
       b=int("".join(str(i) for i in bin_list),2)
       pix[i,j]=(r,g,b)
img.save("P:\Sampleout.jpg")

我需要将修改后的像素设为 oldpixels+1oldpixels-1,而不是 oldpixel 位置 i,j

一个可能的问题是您使用的是 jpeg 格式。默认情况下,此图像格式使用 有损 压缩方案进行压缩,该方案允许稍微改变像素数据的值以获得更小的图像占用空间。保存为 jpeg 并重新加载后,无法保证最低位(或实际上的任何位)相同。

如果您想尝试这种处理,您应该改用 BMP、TGA 或 PNG 等无损格式。 JPEG 也有一个 lossless mode,但大多数软件默认不使用它。