Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 21, 2020 15:21:25

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Можно ли сохранить файл .png в виде двоичного файла?

Привет!
Подскажите, можно ли сохранить графический файл png, bmp, jpg в виде двоичного файла?
Предположим у меня есть несколько графических файлов которые я использую в программе.
Я хочу открыть их и сохранить в один бинарный файл, например, с помощью pickle.
Есть ли такая возможность или нет?

Офлайн

#2 Янв. 21, 2020 15:41:32

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Можно ли сохранить файл .png в виде двоичного файла?

panama555
можно ли сохранить графический файл png, bmp, jpg
а они какие по вашему
panama555
Я хочу открыть их и сохранить в один бинарный файл, например, с помощью pickle.
не доводилось но вроде можно (pickle сохраняет объекты если не ошибаюсь) опять же shelve есть



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Янв. 22, 2020 06:49:19)

Офлайн

#3 Янв. 21, 2020 15:46:03

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Можно ли сохранить файл .png в виде двоичного файла?

Графические файлы png, bmp, jpg и так представляют из себя двоичные файлы. Если вы хотите преобразовать внутренне представление предоставляемое конкретным форматом в некий свой набор байт, то решать вам надо эту задачу, а не “Есть ли такая возможность”. Сохранить в файл вы можете что угодно - любой набор нулей и единиц.



Офлайн

#4 Янв. 21, 2020 17:28:57

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Можно ли сохранить файл .png в виде двоичного файла?

Видимо я не совсем точно выразился. Ещё раз:

 s=[1,2,3,4]
save_file = open('save.dat', 'wb')
pickle.dump(game_data, save_file)
В этом примере используя pickle я сохраняю в бинарный файл объект(список)
Но если я попытаюсь сохранить подобным образом объект (файл) будет ошибка
 s=pygame.image.load(file.png)
save_file = open('save.dat', 'wb')
pickle.dump(s, save_file)
Поэтому появляется вопрос: возможно ли стандартными средствами в бинарный файл save.dat(pickle) сохранить объект- графический файл(png).
Ещё раз подчёркиваю - можно ли добиться этого стандартными средствами, не изобретая велосипед.
Или же без велосипеда не обойтись?

Офлайн

#5 Янв. 21, 2020 17:50:07

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Можно ли сохранить файл .png в виде двоичного файла?

panama555
Поэтому появляется вопрос: возможно ли стандартными средствами в бинарный файл save.dat(pickle) сохранить объект- графический файл(png).
Ещё раз подчёркиваю - можно ли добиться этого стандартными средствами, не изобретая велосипед.
Или же без велосипеда не обойтись?
Блин, да какой смысл сохранять в файл объект файла?
Во-первых, сделав open('save.dat', ‘wb’) вы ничего с диска еще не прочитали, вы только создали сокет и передали его дескриптор в программу. Что по-вашему должно сохраниться в виде pickle.dump - номер дескриптора? Это бессмысленно.
Если же вы все-таки решитесь файл прочитать, чтобы извлечь данные из диска в память, то эти данные у вас будут храниться не в объекте файла.
 with open("myfile", "rb") as f:
    byte = f.read(1) # байт здесь
    while byte:
        byte = f.read(1) # байт здесь
Объект файла - это сокет через который вы получите свои байты и по выходе из контекста этот сокет закроется и потеряет смысл. Представьте, что этот объект файла это дырка в ведре, через которую течет вода. Вы воду хотите сохранить или дырку?



Офлайн

#6 Янв. 21, 2020 18:09:55

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Можно ли сохранить файл .png в виде двоичного файла?

 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()
Я сохранил файл-png в dat-файл таким образом.
И могу теперь его загрузить в другой программе.
Теперь вопрос: как в программе загрузить этот dat-файл, чтобы программа могла его использовать как png-файл,
т.е. вывести его на экран в виде изображения

Отредактировано panama555 (Янв. 21, 2020 18:11:53)

Офлайн

#7 Янв. 21, 2020 21:31:31

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Можно ли сохранить файл .png в виде двоичного файла?

panama555

panama555
Я сохранил файл-png в dat-файл таким образом.
обьясните мне смысл такого преобразования? откройте в heх редакторе оба файла и посмотрите разницу.
panama555
Теперь вопрос: как в программе загрузить этот dat-файл, чтобы программа могла его использовать как png-файл,
ну вы же понимаете что ничего по сути вы не сделали, у вас на выходе вышел такой же png плюс десяток байт от пикла. Вы ведь в курсе что в PNG -формате данные сжимаються\кодируются и чтобы получить картинку нужно эти данные распаковать согласно аогоритму PNG-cжатия. Если вы сделаете pickle.loads то просто получите кучу байт. Вам нужно всервно получить обьект через BytesIO() и скормить его уже pygame.image.load-у, котороый уже преобразует сжатые данные в пикселы.
Если так уж припекло хранить все в одном файле, зачем вам вообще пикл? что мешает хранить все файлы , например в zip архиве? Читаете через zipfile(там теже яйца что и просто с ФС только в профиль, есть open, read и тд…), а в случае необходимости, добавить\удалить файлы можно практически любым архиватором.

Еще вариант именно с пайгемом, посмотрите в сторону pygame.image.fromstring()/ pygame.image.frombuffer() и pygame.image.tostring(). открываете картинку черз pygame.image.load, загоняете в словарь через pygame.image.tostring(). словарь сохраняете pikle-ом или shelve-ом(почемуто я уверен что про сжатие придеться забыть, хотя ХЗ нужно экспериментировать). Потом также их читаете и загоняете сразу в пайгейм pygame.image.fromtring-ом или pygame.image.frombuffer-ом. По крайней мере избавитесь от посредника в виде BytesIO/StringIO.





==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 21, 2020 21:32:49)

Офлайн

#8 Янв. 21, 2020 22:24:23

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Можно ли сохранить файл .png в виде двоичного файла?

PEHDOM
Еще вариант именно с пайгемом, посмотрите в сторону pygame.image.fromstring()/ pygame.image.frombuffer() и pygame.image.tostring(). открываете картинку черз pygame.image.load, загоняете в словарь через pygame.image.tostring().
Вот это ближе к телу!
Обязательно попробую.
Спасибо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version