Как сохранить картинку непосредственно в Python-модуль?
Для этого нам пригодится библиотека base64.
Этот способ кодирование позволяет любые бинарные или текстовые данные закодировать с помощью 64 ASCII символов. То есть получится простая строка.
Зачем это вообще?
Это обратимое кодирование позволит любые бинарные данные сохранить в текстовом виде и отправить туда где для записи поддерживается только текст.
Например:
- встроить в URL в GET запрос как параметр
- встроить в тело email
- сохранить в Python-модуль как переменную
- сохранить любой конфиг, например JSON
- записать в базу данных
- зашить в HTML (XML) или CSS
Чаще всего так кодируют изображения в HTML и в CSS. Есть даже специальные сервисы для кодирование изображений.
Давайте закодируем и декодируем картинку.
Кодирование:
>>> import base64
>>> src_path = 'image1.png'
>>> with open(src_path, 'rb') as f:
>>> raw_data = f.read()
>>> image_encoded = base64.encodebytes(raw_data)
>>> print(image_encoded)
b'iVBORw...Jggg==\n'
Теперь наша картинка это просто байты в переменной. Её можно сохранить непосредственно в модуле и использовать позже.
Декодирование:
>>> save_path = "image2.png"
>>> raw_data = base64.decodebytes(image_encoded)
>>> with open(save_path, 'wb') as f:
>>> f.write(raw_data)
Картинка восстановлена обратно в файл.
Стоит помнить что:
- это не шифрование, пароли так не стоит прятать. Строка легко декодируется в исходник.
- размер данных после кодирования увеличивается примерно на четверть
- не храните изображения в базе данных таким способом!
#libs#tricks