Кодирование сохраненного текста в изображение - PullRequest
0 голосов
/ 10 апреля 2019

Итак, я работаю над проектом, в котором я разбираю изображение на строку, добавляю к указанной строке, затем декодирую обратно в изображение, но я обнаружил, что когда я кодирую его после запуска программы, все добавляется Код был оставлен без внимания. Это проблема программирования с моей стороны, или кодирование игнорирует данные, которые не требуются для изображения?

Давайте погрузимся глубже:

Во всем коде, который я наблюдаю, чтобы убедиться, что содержимое, входящее в финальный декодер, является тем, чем я хочу, и оно есть. Сделайте так, чтобы это сузило процесс декодирования, который должен на него повлиять. Когда новое изображение открывается снова, новый текст исчезает.

Есть ли способ это исправить?

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 ]

2 голосов
/ 10 апреля 2019

Мне кажется странным, что внутри оператора with вы открываете изображение снова fh = open("wow.png", "wb"))

А как насчет простого вызова imageFile.write(decstr) вместо этого?

Примечание: я не могу комментировать, как недостаточно репутации

2 голосов
/ 10 апреля 2019
  1. PNG обрезает все после трейлинга ==.Вы должны добавлять свои строки не в конец файла, а непосредственно перед ==.Вот рабочая строка, которую вы должны заменить:

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

  2. в кодировке base64 используются символы [a-zA-z0-9+/=], вы не можете использовать пробелы, точки и т. Д.строк, он исчезнет автоматически.

Редактировать 1: После того, как вы изменили свой вопрос, я должен добавить, что вы не должны открывать файл снова, когда он открыт.Откройте и запишите в другой файл, как было в первой версии вашего вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...