从Base64保存png文件后,结果文件将生成不同的Base64字符串

时间:2016-06-17 11:06:30

标签: vb.net image base64 png

我有一个wysiwyg编辑器的页面,它允许我们的合作伙伴定制他们的个人资料信息,生成将被呈现到我们的市场的HTML。

在我们的合作伙伴发挥创意并且开始在Base64中使用大量嵌入图像膨胀我们的html之前不久,制作一个100kb的页面为3mb +。

编码器(我)带着一个邪恶的想法获取这个Base64图像,将其保存到合作伙伴图像文件夹(我们已经有的结构并且工作正常)并用适当的图像链接替换代码我们的存储库。

一切运作良好,但我知道合作伙伴使用word创建个人资料html并过去我们的所见即所得编辑器。因此,他们存储这些文件的可能性很大,当他们想要改变某些内容时,他们会改变他们的文档,然后在所见即所得文件中过去。

它不应该成为一个问题,因为在我根据所提供的Base64实际保存它之前预见到我已经编码检查该图像并不存在于图像文件夹中,这是我现在面临的问题。

它对jpg文件非常有效。我得到Base64代码,检查文件夹中的文件,读取它们的字节并转换为Base64,然后我找到与合作伙伴提供的Base64相对应的文件。

现在有了png文件,即使我将Base64保存为光盘上的图像文件,同样的图像文件从光盘转换到Base64会产生稍微不同的Base64字符串,这不让我知道我是否已经之前保存了Base64,每次都创建同一文件的新副本。

以下是基于原始img标记保存图像的代码:

embededImages.ForEach(Sub(imageContainer)

                                  Dim image As Image
                                  Using ms As MemoryStream = New MemoryStream(Convert.FromBase64String(imageContainer.ImageBase64String))
                                      image = Image.FromStream(ms)
                                      image.Save(String.Concat(imageFolderPath, "\", Guid.NewGuid().ToString(), ".", imageContainer.ImageExtension))
                                  End Using

                              End Sub)

现在这里是将图像读入Base64字符串并尝试将其中的任何一个与我目前处理的Base64字符串匹配的代码:

imagesOnDisc.ForEach(Sub(imagePath)

                                      Dim currentFileBase64String = Convert.ToBase64String(File.ReadAllBytes(imagePath))

                                      If currentFileBase64String = embededImages(i).ImageBase64String Then

                                          imageFound = True

                                          Return

                                      End If

                                  End Sub)

有没有人知道.NET保存png图像的特定方式,导致它们在进程被反转时成为不同的Base64字符串?

我尝试了几张图片,结果总是一样的:如果它是jpg图像,我保存的Base64与之后读的完全相同,而png文件我尝试了几个具有相同结果的不同文件并且还将wysiwyg编辑器的源代码中的Base64替换为刚刚创建的文件中的一个,并且我总是得到一个不同的Base64字符串。

0 个答案:

没有答案