因此,我正在一个项目中,我将图像分解为字符串,添加到所述字符串,然后将其解码回图像,但是我发现在程序运行后对它进行编码时,全部添加了代码已被忽略。这是我的编程问题,还是编码忽略了图像不需要的数据?
让我们更深入地研究
在我的代码中,我将确保最终解码的内容确实是我想要的。这样做会将其范围缩小到必须影响它的实际解码过程。重新打开新图像后,新文本消失了。
有没有办法解决这个问题?
import base64
import os
import random
with open("wow.png", "rb") as imageFile: #image to bytes
string = base64.b64encode(imageFile.read())
print(type(string))
print(string)
betterString = string.decode("utf-8") #bytes to string
print(type(betterString))
print(betterString)
betterString = betterString + "I Love you."
back2String = betterString.encode("utf-8") #String to bytes
print(type(back2String))
print(back2String)
fh = open("wow.png", "wb")
decstr=base64.b64decode(back2String)
fh.write(decstr)
fh.close()
如前所述,新图像应该具有已保存内容的全部,但实际上只是原始导入文件的一部分。
答案 0 :(得分:2)
PNG在尾随==
之后会裁剪所有内容。您不应该在文件末尾而是在==
之前添加字符串。这是您应该替换的工作行:
betterString = betterString[:-2] + "I Love youWAKAWAKAWAKA" + "=="
base64编码使用[a-zA-z0-9+/=]
符号,您不能在字符串中使用空格,点等,它将自动消失。
编辑1::更改问题后,我应该补充一点,即在打开文件时不要再次打开它。与问题的第一个版本中一样,打开并写入另一个文件。
答案 1 :(得分:2)
在我看来,with
语句内您再次打开图像fh = open("wow.png", "wb"))
那只叫imageFile.write(decstr)
呢?
我无法发表评论,因为声誉还不够