将保存的文本编码为图像

时间:2019-04-10 14:30:57

标签: python encoding scripting

因此,我正在一个项目中,我将图像分解为字符串,添加到所述字符串,然后将其解码回图像,但是我发现在程序运行后对它进行编码时,全部添加了代码已被忽略。这是我的编程问题,还是编码忽略了图像不需要的数据?

让我们更深入地研究

在我的代码中,我将确保最终解码的内容确实是我想要的。这样做会将其范围缩小到必须影响它的实际解码过程。重新打开新图像后,新文本消失了。

有没有办法解决这个问题?

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()

如前所述,新图像应该具有已保存内容的全部,但实际上只是原始导入文件的一部分。

2 个答案:

答案 0 :(得分:2)

  1. PNG在尾随==之后会裁剪所有内容。您不应该在文件末尾而是在==之前添加字符串。这是您应该替换的工作行:

    betterString = betterString[:-2] + "I Love youWAKAWAKAWAKA" + "=="

  2. base64编码使用[a-zA-z0-9+/=]符号,您不能在字符串中使用空格,点等,它将自动消失。

编辑1::更改问题后,我应该补充一点,即在打开文件时不要再次打开它。与问题的第一个版本中一样,打开并写入另一个文件。

答案 1 :(得分:2)

在我看来,with语句内您再次打开图像fh = open("wow.png", "wb"))

那只叫imageFile.write(decstr)呢?

我无法发表评论,因为声誉还不够