Seite 1 von 2

Bilder und Videos in Programm einbinden

Verfasst: Dienstag 10. Juli 2018, 23:05
von xXSkyWalkerXx1
Abend! :D

Also ich habe nun endlich mein Script.Game.Interface geschrieben - funktioniert: Skript ist änderbar und Datei wird erzeugt und so. ^^
Jedenfalls also so die Grundlage.
Doch ich würde gerne Bilder bzw Videos einfügen,doch so, dass man diese nicht am PC oder Internet haben muss.
Edliche Programme die z.b. eine ".exe" sind , haben Bilder integriert, ohne, dass man sie irgendwo auf'm PC findet oder Internet braucht, also im Programm implementiert.
Weiß nur nicht wie das gehen soll?

Mit freundlichen Grüßen,
xXSkyWalkerXx1

Re: Bilder und Videos in Programm einbinden

Verfasst: Mittwoch 11. Juli 2018, 03:45
von __deets__
Mit Python geht es nicht. Selbst wenn man da eine EXE erstellt mit py2exe und Co ist das immer noch ein Sack von Dateien. Meistens pyc files mit Python Code drin, aber natürlich auch alle möglichen anderen Dateien, die man braucht. Die werden dann einfach relativ zum Code abgelegt und vom Code dann einfach benutzt.

Theoretisch kannst du binäre Daten auch in ein Python Modul kodieren, und dann statt Dateien Code importieren. Wirklich dolle ist das nicht, weil man je nach GUI Library dann doch wieder eine externe Datei daraus machen muss. Ist also eher augenwischerei.

Re: Bilder und Videos in Programm einbinden

Verfasst: Mittwoch 11. Juli 2018, 08:56
von Sirius3
Am PC mußt Du sie so oder so haben, ob sie nun in einer ZIP-Datei gepackt sind, oder getrennt.

Re: Bilder und Videos in Programm einbinden

Verfasst: Mittwoch 11. Juli 2018, 14:11
von xXSkyWalkerXx1
Also kann ich nur Programm in ner Zip stecken (oder wo auch immer) und die Bilder/Videos ebenfalls in diese Zip.
So kann ich das Programm wenigstens verschicken.

Re: Bilder und Videos in Programm einbinden

Verfasst: Mittwoch 11. Juli 2018, 14:17
von ThomasL
__deets__ hat geschrieben: Mittwoch 11. Juli 2018, 03:45Theoretisch kannst du binäre Daten auch in ein Python Modul kodieren, und dann statt Dateien Code importieren.
Nicht nur theoretisch, imho in Python wohl die einzige Möglichkeit (lasse mich gerne vom Gegenteil überzeugen).
Hier https://github.com/robertgallup/bmp2hex bmp2hex - Graphics bitmap file to C-style hex converter
hat jemand das für C-Style Code gemacht.
Kannst du eventuell so umwandeln, dass ein Python-Modul dabei rauskommt.

Re: Bilder und Videos in Programm einbinden

Verfasst: Mittwoch 11. Juli 2018, 14:38
von __deets__
Wieso die einzige Möglichkeit? Ich habe doch schon beschrieben, wie man es anders machen kann. Einfach Dateien daneben legen. Der TE wünscht sich (aus dem Kontext seiner anderen Posts heraus) ein stand-alone Exexcutable. Das gibt es für Python nicht. Man kann zwar allen Code und alle Daten in ein riesen Modul packen. Nur fehlt da ja dann der Interpreter. Will man sein Programm also vernünftig ausliefern, greift man eh zu einem Installer, der gleich alles mitliefert. Die einzige Alternative wäre ein statisch gelinktes EXE mit allem Python
Code und Daten darin. Aber das existiert mE nicht, und aus der Erfahrung einen Python Interpreter eingebettet an unsere Kunden auszuliefern kann ich auch nur davon abraten, das basteln zu wollen. Den TE überfordert es allemal.

Re: Bilder und Videos in Programm einbinden

Verfasst: Mittwoch 11. Juli 2018, 15:06
von xXSkyWalkerXx1
Ich denke mal, ich werds halt einfach machen: Programm in eine ZIP packen und in der gleichen ZIP die ganzen Bilder/Videos.

Re: Bilder und Videos in Programm einbinden

Verfasst: Mittwoch 11. Juli 2018, 15:12
von __blackjack__
Manche GUI-Toolkits können auch Bilder in Formaten wie X PixMaps direkt aus dem Programm ”konsumieren”. Hier ein Beispiel das ich neulich in einem anderen Forum gepostet hatte (eine Portierung eines C++-Beispielprogramms für FLTK nach Python und Qt4):

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8
from __future__ import absolute_import, division, print_function
import sys
from PyQt4 import uic
from PyQt4.QtCore import QSize
from PyQt4.QtGui import (
    QApplication, QIcon, QListWidgetItem, QMessageBox, QPixmap,
)

CAT_XPM = [
    '50 34 4 1',
    '  c black',
    'o c #ff9900',
    '@ c #ffffff',
    '# c None',
    '##################################################',
    '###      ##############################       ####',
    '### ooooo  ###########################  ooooo ####',
    '### oo  oo  #########################  oo  oo ####',
    '### oo   oo  #######################  oo   oo ####',
    '### oo    oo  #####################  oo    oo ####',
    '### oo     oo  ###################  oo     oo ####',
    '### oo      oo                     oo      oo ####',
    '### oo       oo  ooooooooooooooo  oo       oo ####',
    '### oo        ooooooooooooooooooooo        oo ####',
    '### oo     ooooooooooooooooooooooooooo    ooo ####',
    '#### oo   ooooooo ooooooooooooo ooooooo   oo #####',
    '####  oo oooooooo ooooooooooooo oooooooo oo  #####',
    '##### oo oooooooo ooooooooooooo oooooooo oo ######',
    '#####  o ooooooooooooooooooooooooooooooo o  ######',
    '###### ooooooooooooooooooooooooooooooooooo #######',
    '##### ooooooooo     ooooooooo     ooooooooo ######',
    '##### oooooooo  @@@  ooooooo  @@@  oooooooo ######',
    '##### oooooooo @@@@@ ooooooo @@@@@ oooooooo ######',
    '##### oooooooo @@@@@ ooooooo @@@@@ oooooooo ######',
    '##### oooooooo  @@@  ooooooo  @@@  oooooooo ######',
    '##### ooooooooo     ooooooooo     ooooooooo ######',
    '###### oooooooooooooo       oooooooooooooo #######',
    '###### oooooooo@@@@@@@     @@@@@@@oooooooo #######',
    '###### ooooooo@@@@@@@@@   @@@@@@@@@ooooooo #######',
    '####### ooooo@@@@@@@@@@@ @@@@@@@@@@@ooooo ########',
    '######### oo@@@@@@@@@@@@ @@@@@@@@@@@@oo ##########',
    '########## o@@@@@@ @@@@@ @@@@@ @@@@@@o ###########',
    '########### @@@@@@@     @     @@@@@@@ ############',
    '############  @@@@@@@@@@@@@@@@@@@@@  #############',
    '##############  @@@@@@@@@@@@@@@@@  ###############',
    '################    @@@@@@@@@    #################',
    '####################         #####################',
    '##################################################',
]


def main():
    application = QApplication(sys.argv)
    window = uic.loadUi('test.ui')
    
    cat_pixmap = QPixmap(CAT_XPM)
    # Leave some space for text under the item.
    size = cat_pixmap.size() + QSize(0, 20)
    window.thumbnails.setIconSize(size)
    window.thumbnails.setGridSize(size + QSize(30, 30))
    
    cat_icon = QIcon(cat_pixmap)
    for i in xrange(40):
        QListWidgetItem(cat_icon, format(i, '04d'), window.thumbnails)
    
    window.thumbnails.itemClicked.connect(
        lambda item: QMessageBox.information(
            window,
            'Title',
            "Thumbnail '{}' clicked.".format(item.text()),
        )
    )
    window.show()
    sys.exit(application.exec_())


if __name__ == '__main__':
    main()

Re: Bilder und Videos in Programm einbinden

Verfasst: Mittwoch 11. Juli 2018, 15:44
von __deets__
Na da ginge bestimmt auch ein kodiertes PNG in tkinter - dank StringIO. Aber wollen wenn man eh viele Dateien distributieren muss tät ich’s nicht.

Re: Bilder und Videos in Programm einbinden

Verfasst: Mittwoch 11. Juli 2018, 15:59
von __blackjack__
@__deets__: Nö, wollen würde ich das auch nicht. :-) `StringIO` braucht man auch gar nicht, die Bilderklassen in `Tkinter` kennen ein `data`-Schlüsselwortargument bei dem man direkt die Binärdaten übergeben kann. Und die kann man beispielsweise Base64-kodiert als Konstanten in den Quelltext schreiben (lassen). Das hat wuf schon bei einigen seiner Beispiele hier im Forum so gemacht um komplette Beispiele zu haben ohne das man noch Bilder irgendwo hinterlegen/runterladen muss.

Re: Bilder und Videos in Programm einbinden

Verfasst: Donnerstag 12. Juli 2018, 15:13
von xXSkyWalkerXx1
Und wie siehts nun eigentlich mit'n einbetten von Videos aus?
Also mit Videos aus meiner Festplatte.

Re: Bilder und Videos in Programm einbinden

Verfasst: Donnerstag 12. Juli 2018, 15:15
von __blackjack__
@xXSkyWalkerXx1: Wäre der erste Schritt nicht erst einmal abspielen, bevor Du ans einbetten denkst?

Re: Bilder und Videos in Programm einbinden

Verfasst: Donnerstag 12. Juli 2018, 16:29
von xXSkyWalkerXx1
Aber um ein Video abspielen zu können (als Nutzer des Programmes, nicht als Programmierer), muss einem das Video nicht erstmal angezeigt werden? :D
Damit man es überhaupt abspielen kann.

Re: Bilder und Videos in Programm einbinden

Verfasst: Donnerstag 12. Juli 2018, 16:40
von __blackjack__
Häh?

Re: Bilder und Videos in Programm einbinden

Verfasst: Donnerstag 12. Juli 2018, 17:49
von xXSkyWalkerXx1
Naja, ich möchte ja Videos in meinem Programm haben bzw anzeigen.
Du hast gesagt, dass man es erstmal abspielen muss anstatt erst einzubetten: "Wäre der erste Schritt nicht erst einmal abspielen, bevor Du ans einbetten denkst?"

Re: Bilder und Videos in Programm einbinden

Verfasst: Donnerstag 12. Juli 2018, 19:38
von __blackjack__
Ja genau, und Deine Antwort darauf verstehe ich nicht. Solange Du das Video in Deinem Programm nicht abspielen kannst, macht es wenig Sinn darüber nachzudenken ob und wie man die Datei einbetten kann.

Re: Bilder und Videos in Programm einbinden

Verfasst: Donnerstag 12. Juli 2018, 21:53
von xXSkyWalkerXx1
Achsoo... Okey, hättest vllt genauer formulieren sollen. ^^
Naja, abgespielt sollte es eigentlich per Mausklick auf's Video bzw Thumbnail - was auch immer richtig wäre.
Z.B. wenn man YouTube Videos in einem Forumpost einbettet, da klickt man ja auch bloß aufs Video.

Re: Bilder und Videos in Programm einbinden

Verfasst: Donnerstag 12. Juli 2018, 22:10
von __blackjack__
Und wie machst Du das?

Re: Bilder und Videos in Programm einbinden

Verfasst: Donnerstag 12. Juli 2018, 23:27
von xXSkyWalkerXx1
Das weiß ich eben nicht.
Kannst du es vllt erklären, wie ich das Ziel erreichen kann?
Heißt jetzt nicht unbedingt fertigen Code, aber so schritte/Erklärung wie ich zum Ziel komme, wäre sehr gut und nett.

Re: Bilder und Videos in Programm einbinden

Verfasst: Freitag 13. Juli 2018, 14:49
von xXSkyWalkerXx1
Also, das hier wäreso ein Beispiel, wie es aussehen soll:

Code: Alles auswählen

import tkinter, os

main = tkinter.Tk()
main.geometry("500x304")
main.title("Video Player - Test")

def playVideo1():
    os.system("/media/pi/DISK_IMG/Filme/Zombieland.mp4")

canvas = tkinter.Canvas(main,background="black")
canvas.pack(side="top")
playBTN = tkinter.Button(main, text="Play Video",command=playVideo1)
playBTN.place(x=250,y=300,anchor="s")
Da, wo die schwarze Leinwand (Canvas) ist, da soll das Video abgespielt werden.
Hätte es zwar gern, dass man wie bei YouTube bloß auf das Video klicken muss, aber glaube mit Button ist es vllt einfacher - weiß nicht?
Wie lasse ich nun da ein Video abspielen und wie ein Bild?

PS. mit PhotoImage kommt immer ein Fehler mit "couldn't recognized data in image" oder so ähnlich.