Форум сайта python.su
Привет!
Подскажите, можно ли сохранить графический файл png, bmp, jpg в виде двоичного файла?
Предположим у меня есть несколько графических файлов которые я использую в программе.
Я хочу открыть их и сохранить в один бинарный файл, например, с помощью pickle.
Есть ли такая возможность или нет?
Офлайн
panama555а они какие по вашему
можно ли сохранить графический файл png, bmp, jpg
panama555не доводилось но вроде можно (pickle сохраняет объекты если не ошибаюсь) опять же shelve есть
Я хочу открыть их и сохранить в один бинарный файл, например, с помощью pickle.
Отредактировано AD0DE412 (Янв. 22, 2020 06:49:19)
Офлайн
Графические файлы png, bmp, jpg и так представляют из себя двоичные файлы. Если вы хотите преобразовать внутренне представление предоставляемое конкретным форматом в некий свой набор байт, то решать вам надо эту задачу, а не “Есть ли такая возможность”. Сохранить в файл вы можете что угодно - любой набор нулей и единиц.
Офлайн
Видимо я не совсем точно выразился. Ещё раз:
s=[1,2,3,4] save_file = open('save.dat', 'wb') pickle.dump(game_data, save_file)
s=pygame.image.load(file.png) save_file = open('save.dat', 'wb') pickle.dump(s, save_file)
Офлайн
panama555Блин, да какой смысл сохранять в файл объект файла?
Поэтому появляется вопрос: возможно ли стандартными средствами в бинарный файл save.dat(pickle) сохранить объект- графический файл(png).
Ещё раз подчёркиваю - можно ли добиться этого стандартными средствами, не изобретая велосипед.
Или же без велосипеда не обойтись?
with open("myfile", "rb") as f: byte = f.read(1) # байт здесь while byte: byte = f.read(1) # байт здесь
Офлайн
import pickle,pygame s=open("file.png","rb") a=s.read() s.close() save_file = open('save.dat', 'wb') pickle.dump(a, save_file) save_file.close()
Отредактировано panama555 (Янв. 21, 2020 18:11:53)
Офлайн
panama555
panama555обьясните мне смысл такого преобразования? откройте в heх редакторе оба файла и посмотрите разницу.
Я сохранил файл-png в dat-файл таким образом.
panama555ну вы же понимаете что ничего по сути вы не сделали, у вас на выходе вышел такой же png плюс десяток байт от пикла. Вы ведь в курсе что в PNG -формате данные сжимаються\кодируются и чтобы получить картинку нужно эти данные распаковать согласно аогоритму PNG-cжатия. Если вы сделаете pickle.loads то просто получите кучу байт. Вам нужно всервно получить обьект через BytesIO() и скормить его уже pygame.image.load-у, котороый уже преобразует сжатые данные в пикселы.
Теперь вопрос: как в программе загрузить этот dat-файл, чтобы программа могла его использовать как png-файл,
[code python][/code]
Отредактировано PEHDOM (Янв. 21, 2020 21:32:49)
Офлайн
PEHDOMВот это ближе к телу!
Еще вариант именно с пайгемом, посмотрите в сторону pygame.image.fromstring()/ pygame.image.frombuffer() и pygame.image.tostring(). открываете картинку черз pygame.image.load, загоняете в словарь через pygame.image.tostring().
Офлайн