当您在文本编辑器中打开图像时,您会得到一些不太合理的字符(至少对我而言)。有没有办法为该文本添加注释,因此使用图像查看器打开文件时不会损坏文件。
所以,像这样:
会变成这样:
答案 0 :(得分:1)
如果你的图像格式支持任何元素字段,那么设置元数据字段。
例如,对于PNG,您可以在导出文件时设置comment
字段,也可以使用exiftool之类的单独工具设置:
exiftool -comment="One does not simply put text into the image data" test.png
如果文本的目的是确保所有权,那么请看一下数字水印。
答案 1 :(得分:1)
如果您希望对图片中的信息进行实际编码,则应使用隐写术(https://en.wikipedia.org/wiki/Steganography)
wiki文章将向您介绍隐藏在树木图片中的猫的图片的基础知识和示例以及示例,作为隐藏信息的示例。在隐藏文本的情况下,您可以执行以下操作:
<强>编码
&#34;隐藏&#34; = 72 105 100 100 101 110
72 = 01001000/105 = 01101001/100 = 01100100/101 = 01100100/110 = 01101110
对于每个字母,将8位二进制表示转换为四个2位二进制表示,我们称之为mA,mR,mG,mB,原因很快就会变得清晰
72 = 01 00 10 00 =&gt; 1 0 2 0 = mA mR mG mB
打开图像文件进行编辑:我建议使用C#加载图像,然后使用获取/设置像素进行编辑(How to manipulate images at the pixel level in C#)
对每个像素使用每个颜色通道的最后2位对邮件进行编码。例如,要在图像的第一个像素中对H进行编码,您可以使用说明末尾的C#代码
一旦所有单词的字母 - 每个像素一个字母 - 已经在图像中编码就完成了。
解码
反过来使用相同的基本过程。
要记住的是,我所描述的技术将允许您在没有人类观察者注意的情况下对图像中的信息进行编码,因为它仅操纵单个像素中每个颜色通道的最后2位的图像,以及人眼不能真正区分[(252,252,252,252)=&gt;范围内的颜色之间的区别。 (255255255255)。
但是作为思考的东西,我会提到计算机可以使用正确的算法,并且正在积极研究如何提高计算机能够选择这类东西的能力。
因此,如果您只想添加水印,那么这应该可行,但如果您想要实际隐藏某些内容,则必须加密该消息,然后执行 关于加密二进制文件的隐写术。由于加密数据比纯文本数据大得多,因此需要具有更多像素的图像。
以下是使用C#将H编码到图像的第一个像素中的代码。
//H=72 and needs the following message Alpha, message Red, message Green, message Blue components
mA = 1;
mR = 0;
mG = 2;
mB = 0;
Bitmap myBitmap = new Bitmap("YourImage.bmp");
//pixel 0,0 is the first pixel
Color pixelColor = myBitmap.GetPixel(0, 0);
//the 252 places 1's in the 6 bits that we aren't manipulating so that ANDing with the message bits works
pixelColor = Color.FromArgb(c.A & (252 + mA), c.R & (252 + mR), c.G & (252 + mG), c.B & (252 + mB));
myBitmap.SetPixel(0, 0, pixelColor);