Как я могу сохранить изображение в коде (с помощью маринада, укропа или другого байт-кода) и сохранить в файл, если его нет в файловой системе? - PullRequest
0 голосов
/ 17 мая 2018

Как я могу сохранить изображение в коде (с помощью маринада, укропа или другого байт-кода) и сохранить в файл, если его нет в файловой системе? Python 3.6.5.

Для работы приложения Tkinter мне необходимо представить две фотографии. они могут присутствовать или не присутствовать на устройстве постоянно, поэтому мне нужно создавать их по мере необходимости. Тем не менее, я не могу понять, как это сделать, пока это не повредит файл. Есть предложения?

Текущий код:

with open("0.png", 'rb') as f:
    temp = f.read()
    CogFile = pickle.dumps(temp, pickle.HIGHEST_PROTOCOL)
    print(FileData)
    pickle.dump(FileData, open("1.png", 'wb'), pickle.HIGHEST_PROTOCOL)

with open("0.gif", 'rb') as F:
    temp = F.read()
    CogFile = pickle.dumps(temp, pickle.HIGHEST_PROTOCOL)
    print(FileData)
    pickle.dump(FileData, open("1.gif", 'wb'), pickle.HIGHEST_PROTOCOL)

1 Ответ

0 голосов
/ 17 мая 2018

Вы можете встроить изображения в файл Python. Для этого биты изображения по умолчанию должны быть в недвоичном формате, который синтаксически вписывается в файл .py. Вот файл кодировщика, который вы можете запустить один раз, а затем вставить результаты в файл .py в качестве переменной. Он выполняет base64-кодирование для преобразования двоичного файла в acscii и оборачивает все это в объект python bytes.

import sys
import base64

try:
    var = sys.argv[1]
    fn = sys.argv[2]
    with open(fn, 'rb') as fp:
        print(var, '= b"""\\')
        for line in base64.encodebytes(fp.read()).split(b'\n'):
            if line:
                print(line.decode('ascii'))
        print('"""')
except (IndexError, OSError):
    print("usage: pyencode.py variable_name file_to_encode")

Как пример

$ python3 pyencoder.py dft_png stackoverlow.png 
dft_png = b"""\
iVBORw0KGgoAAAANSUhEUgAAAGkAAABpCAMAAAAOXP0IAAAAe1BMVEX////0gCS8u7u5uLjNzMzy
8vL6z7j0eQf0eg/5v6Dk5OTZ2dn0fh/0fRvzdQD//PnCwcH+9/P83cj+9e396971j0P3nVv3o2f9
5tb4soL82sH4rnr6yKb5u5T1jDv0hCnzbwD2lk/6y673p2771Lf5uo31iy71iDP5wZrUFssbAAAC
yElEQVRoge2XW4OaMBCFjXY3s2vGFMJVEASh8P9/YUnCRdu662ri9iHnTYF8JGfOJKxWTk5OTk5O
Tk6T8uQ5HHHaVd4zQEkFBNongGqKhBBs7JMSxgYS6wL7qEbOiWD0BKsyUKgnWOVValZ0bx/ll8qq
wpZV3jKHmmqruB3SAdppZK6tgt4KKKeMxmL8IUJlFbORKuUNVpM1U6rEhw/dI4E6ReVkVo6WrPJS
YGq9SD7+c9KpsmBVjhoFqZ6GGFPlm0c1nRqawEmb4xNlVWghVXK7UKhKb4S9ShXEFlIlYo3CQi0Z
P+n1s5EqPtUFVXWhU8WIBauWukDVL3zUDdBQqoKLnr0f60L3C50qU1ZlGDVnIyW6ERFURRcbTFVA
GdKqXhZInKhGdfvJKohMkFL51ohhP+/mXotLv9izybRHFXRq1KE3lP2c0fN+0e8KM5tvzXSG5Lhd
OrH2S7/grakmkWSoQyRZkI3ZmfuF0WYUpN3EIkhiX5ky9gsMzR7Ggr6gM4vqouftgLdwwBR5qPdC
VYhVLWeSM0QbjcirIzqxGC16IXf8/PPn7hH3IzKzoGjFSlg6hg3yM1gK0eR52auF98drB9lciHAw
R2qOtDi9NckFLTiUYPzDpoWhqQHrwrhPxBIc0YdDO4LUHGgV6wJgA46yKK39+Qxbh5QanJIIp7iq
GAGQokqbQFnHG5PfTz4AsnOYnB3V1hnErOR3TBuHHQKSCw1riV2RmT6Si+T1EJW7vyaH1aMjv/+U
2l78x70gz6qCAC40zOSVrbr7/T7SZr1eb7b/uBLs62youBEHquVt1d2mSVJcSOvKwahdYJekJPzB
ul/eE0hnMkTih7cPxE2SjnBdR5Orx3fkunaO9AnpSK/LqE+r+vW6apO1d4Mc6ZtJL7fpYdJ6c6vW
j5K+JEc6I31d95Fefnxd95GcnJycnJycnP4j/QYzhDnIDHrHXQAAAABJRU5ErkJggg==
"""

После вставки в программу расшифровка будет

import base64

dft_png = b"""\
iVBORw0KGgoAAAANSUhEUgAAAGkAAABpCAMAAAAOXP0IAAAAe1BMVEX////0gCS8u7u5uLjNzMzy
8vL6z7j0eQf0eg/5v6Dk5OTZ2dn0fh/0fRvzdQD//PnCwcH+9/P83cj+9e396971j0P3nVv3o2f9
5tb4soL82sH4rnr6yKb5u5T1jDv0hCnzbwD2lk/6y673p2771Lf5uo31iy71iDP5wZrUFssbAAAC
yElEQVRoge2XW4OaMBCFjXY3s2vGFMJVEASh8P9/YUnCRdu662ri9iHnTYF8JGfOJKxWTk5OTk5O
Tk6T8uQ5HHHaVd4zQEkFBNongGqKhBBs7JMSxgYS6wL7qEbOiWD0BKsyUKgnWOVValZ0bx/ll8qq
wpZV3jKHmmqruB3SAdppZK6tgt4KKKeMxmL8IUJlFbORKuUNVpM1U6rEhw/dI4E6ReVkVo6WrPJS
YGq9SD7+c9KpsmBVjhoFqZ6GGFPlm0c1nRqawEmb4xNlVWghVXK7UKhKb4S9ShXEFlIlYo3CQi0Z
P+n1s5EqPtUFVXWhU8WIBauWukDVL3zUDdBQqoKLnr0f60L3C50qU1ZlGDVnIyW6ERFURRcbTFVA
GdKqXhZInKhGdfvJKohMkFL51ohhP+/mXotLv9izybRHFXRq1KE3lP2c0fN+0e8KM5tvzXSG5Lhd
OrH2S7/grakmkWSoQyRZkI3ZmfuF0WYUpN3EIkhiX5ky9gsMzR7Ggr6gM4vqouftgLdwwBR5qPdC
VYhVLWeSM0QbjcirIzqxGC16IXf8/PPn7hH3IzKzoGjFSlg6hg3yM1gK0eR52auF98drB9lciHAw
R2qOtDi9NckFLTiUYPzDpoWhqQHrwrhPxBIc0YdDO4LUHGgV6wJgA46yKK39+Qxbh5QanJIIp7iq
GAGQokqbQFnHG5PfTz4AsnOYnB3V1hnErOR3TBuHHQKSCw1riV2RmT6Si+T1EJW7vyaH1aMjv/+U
2l78x70gz6qCAC40zOSVrbr7/T7SZr1eb7b/uBLs62youBEHquVt1d2mSVJcSOvKwahdYJekJPzB
ul/eE0hnMkTih7cPxE2SjnBdR5Orx3fkunaO9AnpSK/LqE+r+vW6apO1d4Mc6ZtJL7fpYdJ6c6vW
j5K+JEc6I31d95Fefnxd95GcnJycnJycnP4j/QYzhDnIDHrHXQAAAABJRU5ErkJggg==
"""

with open('1.png', 'wb') as fp:
    fp.write(base64.decodebytes(dft_png))
...