问题描述
在项目中遇到这么个问题,需要把Image转换成Hex的字符串,但是发现在不同的计算机上得到的结果会不一样;不知道什么原因publicstringImageToString(Imageimage){if(image==null){returnnull;}stringdata="";byte[]bytedata=null;using(MemoryStreamoMemoryStream=newMemoryStream()){//建立副本using(BitmapoBitmap=newBitmap(image)){oBitmap.Save(oMemoryStream,System.Drawing.Imaging.ImageFormat.Jpeg);oMemoryStream.Position=0;oMemoryStream.Seek(0,SeekOrigin.Begin);bytedata=newbyte[oMemoryStream.Length];oMemoryStream.Read(bytedata,0,Convert.ToInt32(oMemoryStream.Length));oMemoryStream.Flush();}}//把bytedata的数据保存到文件stringfilename="c:\"+textBox1.Text+".txt";if(!File.Exists(filename)){File.Create(filename).Close();}StringBuilderbuilder=newStringBuilder();for(inti=0;i<bytedata.Length;i++){builder.Append(bytedata[i]);}File.WriteAllText(filename,builder.ToString());//在不同的计算机上,这里打印出的结果就不一样了//byte转成HexStrdata=byteToHexStr(bytedata);intlen=data.Length;returndata;}
解决方案
解决方案二:
图片文件都有文件头信息,头信息里常常会带有作成日期,所有人之类的信息,所以每次生成都可能会不同。
解决方案三:
引用1楼xdashewan的回复:
图片文件都有文件头信息,头信息里常常会带有作成日期,所有人之类的信息,所以每次生成都可能会不同。
怎么保证一样呢?我是用某个图片去做检索用,如果不一样的话,检索出来的结果也会有细微不同
解决方案四:
考虑64位和32位的问题,试试生成x86
解决方案五:
引用3楼rocmemory的回复:
考虑64位和32位的问题,试试生成x86
都是32位的
解决方案六:
比较图片,用该图片的md5或哈希码进行比较,例如我们在网上下载一个文件,有这两个编码的值
解决方案七:
楼主的代码中是将图片复制后再存储的,这个原因不是明摆着的么,存为JPEG就会带一些其他数据.如果原始的图片已经是JPEG格式的话就不要再复制了,可以直接这样用:image.Save(oMemoryStream,image.RawFormat);
解决方案八:
位于网络位置的同一张图片,我在不同的计算机上加载,结果就是不一样,通过比较.NET版本后发现,不同的.NET版本出来的结果不一样,而相同的.NET版本下,产生的结果是一样的