(C# 对WORD图片的操作)如何将图片的字节流添加到WORD中

qianplaypn 2011-08-11 04:16:04
小弟最近遇到一个将信息隐藏在图片中,然后放在WORD里面的项目。在如何将修改后字节流的图片加到WORD中这个问题上

小纠结了一下。

Shapes对象的AddPicture()方法中的8个参数,第一个参数就是FileName 但这是通过硬盘上绝对路径获得图片的。而我

为了将信息隐藏在图片中,首先对图片通过FileStream写入 ,然后在byte[]中对图片字节进行了修改 得到一个修改后的字节

流byte[] byte_alterpic 。 如何将这个东东添加到WORD中而显示呢? 请各位大大赐教。

PS:自己用了一个很笨的方法就是将得到的byte_alterpic 通过FileStream的Write方法在写回到硬盘,下次在从硬盘中调

出来,但这样会破坏原图片~ 而这个原图片是希望不变,以后多次调用的。故想到能不能在内存中修改后直接插入到WORD中

然后通过一定办法在将WORD中这张图片字节流提出来。

...全文
645 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
icansaymyabc 2011-08-19
  • 打赏
  • 举报
回复
打个比方,一张图片在你手中是jpg格式,但是word把它变成了png格式保存了。虽然图片没变,但jpg流和png流是不一样的吧?你试图从png流中查找你插入到jpg流中的数据,怎么可能找得到呢?就算有方法将png格式转换成jpg格式,也不能完全恢复你先前插入的数据,因为jpg和png都是有损压缩格式,你把它转了两道,图片细节就损失了两次,当然不可能找到你的原始byte流。

你说的那些用图片隐藏信息的首先要搞清楚图片的压缩算法,必须知道压缩过程中处理数据的细节,知到哪些数据会被抛弃,哪些数据会被保留,以及保留的数据会如何编码和还原。才能把自己的数据做成能被压缩算法保留的部分,才知道解压还原后到哪里去找自己的数据。
qianplaypn 2011-08-12
  • 打赏
  • 举报
回复
谢谢icansaymyabc和feixuyue的回复。 但是按ican的说法,Word读入图片后它会将图片重新编码成doc

文档的组件,不会保留你的原始byte流。那么市场上那些用图片嵌入水印信息的电子签章产品怎么实现?我看

一些技术资料,有些是用LSB算法将加密HASH嵌入在图片中。这些信息的提取很重要,如果提取不出来,或提

取出来的和原来加密信息不一致的话是实现不了验证WORD文档改动功能的。SO~~应该是可以完整的提取出来



feixuyue 2011-08-12
  • 打赏
  • 举报
回复
memorystream ms=new memorystream(byte[]);
bitmap bmp=image.fromstream();
ajiangfeijun 2011-08-11
  • 打赏
  • 举报
回复
帮顶下
icansaymyabc 2011-08-11
  • 打赏
  • 举报
回复
你这种想法不现实,Word读入图片后它会将图片重新编码成doc文档的组件,不会保留你的原始byte流。
你可以用宏把shapes的图片复制到剪贴板,然后从剪贴板中读出图片数据。但是不可能找回你的原始byte流的。
qianplaypn 2011-08-11
  • 打赏
  • 举报
回复
看来这位朋友也是用这种通过“借助硬盘”的方法啊~~不过一看就是做过这东东的。

那在请教一下,如何得到指定图片的SHAPES对象(即指定图片)的byte []呢?我想读取设定位置的字节

流啊(因为WORD中可能加载了几张SHAPES的图片)。 这次不可能用到硬盘中的图片了,因为这个DOC是发

给别人的,别人拿到的只有手头上的DOC的文档(其中包含了我们修改了信息的图片),而不会有原来存在我们

硬盘上的图片了。
icansaymyabc 2011-08-11
  • 打赏
  • 举报
回复
1、将得到的byte_alterpic 通过FileStream的Write方法在写回到硬盘上的Temp目录

2、Shapes对象的AddPicture()方法加载temp目录中你改写后的图片文件

3、删除temp中的图片。

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧