一个关于C程序的问题,求助高手

请问各位高手如果将一幅JPG图片用记事本打开,然后在最后加入一些文字信息,保存,而另一幅图片没有进行这样的操作,怎么用C语言将加入了文字信息的图片识别出来?可否给出大概的... 请问各位高手如果将一幅JPG图片用记事本打开,然后在最后加入一些文字信息,保存,而另一幅图片没有进行这样的操作,怎么用C语言将加入了文字信息的图片识别出来?
可否给出大概的实现代码?
谢谢回答的各位,但是分只能给一个人,希望大家理解!
展开
 我来答
zzyyxxaabbcc
2010-10-28 · TA获得超过3641个赞
知道大有可为答主
回答量:3542
采纳率:50%
帮助的人:3168万
展开全部
用记事本方式打开jpg文件,在文件尾写入文本信息,然后保存。这样的操作会导致原文件内的很多数据丢失,并且没有办法恢复。

因为记事本是文字处理程序,只能显示可见的字符,而jpg文件是二进制文件,里面有很多数值是不可见字符。所以用记事本打开jpg文件就会造成这些不可见字符的丢失,最终导致jpg文件被损坏。

可以用C程序按照二进制方式打开jpg文件,然后在文件尾添加数据后保存。这样的操作会造成jpg文件不能被图片浏览软件识别,但是只要再通过程序把尾部添加的数据删除,则图片文件就可以恢复为原来的大小,并且也可以被图形软件识别了。
--------------------
如果想识别图片尾部是否有附加的文字信息,比较简单的办法,就是在附加的文字信息之前增加若干字节的特征码,比如连续2位或多位的0xff值,这是方法之一。同时也可以辅以附加文字信息定长的方式,如每次附加4K字节文字内容,之前用两个“|”字符作为标识符。

那么在判断的时候,可以从文件尾部倒数4K字节,然后取前两个字节判断是否为两个“|”,如果是,说明这个文件是附加过文字信息的。
----------------
按照jpeg文件格式规范,jpeg文件最后以0xFFD9结束,找到这两个字节,如果之后还有数据,必定是被附加上去的。
zhxnlove
2010-10-21 · TA获得超过156个赞
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:81.6万
展开全部
首先我要告诉你,刚刚试验过了,如果用文本编辑jpg文件,保存过后貌似就不能打开了。

貌似这个问题有点难哦,首先你加入信息过后,文件的末尾就变了,文件内容也变了。如果你用c判断,它只知道这两个就是文件,那么你就需要去研究一下jpg的编码格式了,看其实以什么结尾的,在结尾后面加入自己的信息,再去找这个结尾的后面是否有东西就可以了,不过我感觉这个很难实现。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户45345
2010-10-24
知道答主
回答量:6
采纳率:0%
帮助的人:4万
展开全部
jpeg 是压缩文件,你若手动更改,那么会校验失败的,变成无效文件。简单的办法,是找个支持这个JPEG的第三方SDK,然后打开这个JPEG文件,能打开,就说明是有效没改过的,否则就是更改过的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
comingautumn
2010-10-30 · TA获得超过240个赞
知道小有建树答主
回答量:106
采纳率:0%
帮助的人:0
展开全部

如果所说的两幅图片的原始图片是同一幅的话,直接编写程序进行二进制比较就可以找出差异,找出的差异部分可以通过识别是否为字符(文字信息)来判断哪幅图片被加入了文字信息;

    如果所说的两幅图片不是同一幅,那么可能只有通过写一个字符识别程序一个一个图片去检验了,如果在某幅图片中检测到字符串,很大程度上就能说明问题了——jpg格式的图片是二进制数据,符合一定的编码规律,因此其中包含字符(尤其是有意义的字符)的概率很小,那么将其识别出来也不是难事吧。

另:

    1. 这样的加密形式似乎很不靠谱啊,可以考虑数字水印什么的。 

    2. Beyond Compare: 文件比较工具,可以批量比较。 

===========================修正补充==========================

修正:上述的二进制数据包含字符串可能性小的说法不对。事实上会有大量没有意义的字符出现在以记事本打开的jpg文件中...

查看jpeg中是否有隐含的文字信息(人为的),可以考虑从两方面入手:

1. 假设加入文字信息的是低手,随便用二进制或者文本编辑工具向jpg图片中塞进文字信息,那么最有可能的结果就是文件格式被破坏,这时应该很容易检测问题所在:jpeg文件包含压缩的数据信息和这些压缩数据的描述信息,两者是相互对应,密不可分,而其中的描述信息部分有有着严格的格式规范,因此按图索骥能大概确定问题的所在。前提是要熟悉jpeg文件的格式。

2. 假设加入文字信息的是高手,熟悉jpeg相关的知识,他可以利用jpeg文件结构的特点向文件加入一些表面不影响jpeg使用的数据,从而达到隐藏信息(或者其他)的目的。但破解这点对于一个熟悉jpeg的人应该也不难:加入冗余信息后的文件很大程度是不紧凑的,举例来说,通过增加一个多余的DHT表段(Huffman映射表)来承载插入的信息,那么这个行为几乎肯定能被检测到,就像生活拮据时我们总能砍掉不必要的开支。毕竟jpeg的出现就是为了尽量压缩图片的大小呀!存在那么高程度冗余信息的图片不是显得很另类吗?

以上只是大体分析了一下,具体实现可能会有麻烦,暂且保留意见。

综上所述,解决LZ的问题需要熟悉jpeg图片格式、编码标准等等。问题总不会太难办。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ec39437d4
2010-10-28 · TA获得超过225个赞
知道小有建树答主
回答量:495
采纳率:0%
帮助的人:304万
展开全部
你需要看jpeg的编码文档 看看是怎么把一个文件的大小算出来的 上面有说明的 你加入了文字,那么大小就会改变 和原来存储在jpg图片的大小信息部一样的
http://fengmm521.blog.163.com/blog/static/250913582008112584122401/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-10-29
展开全部
你这个属于图像加水印的问题,方法挺多的,建议你看下数字图像处理方面的资料。这有一个方法你可以借鉴一下
http://hi.baidu.com/monyer/blog/item/8bad4d4a24141e2e08f7ef29.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式