1 Bild in 2 Dateien speichern

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ist es machbar, ein Bild von meiner Raspi camera gleichzeitig in zwei verschiedene Ordner zu speichern?
Hier meine ausgangslage:

Code: Alles auswählen

cam.capture('/home/pi/bild.jpg')
Ich würde einmal in '/home/pi/' und einmal in '/home/' speichern wollen.
Das ist jetzt natürlich nur ein Beispiel.
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

Erstelle doch einen Link zur Originaldatei.
Mit subprocess kann man sowas umsetzen.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Das Problem ist, dass ich das Bild verschieden benennen möchte.
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

Du kannst den Linknamen benennen wie du möchtest. Vielleicht solltest du erst einmal lesen und schauen, ob es für dich zutrifft.
BlackJack

@sebastian0202: Wozu soll da `subprocess` gut sein? Und ein Link ist nicht das selbe wie ein Bild zweimal zu speichern.

@egon11: Einen Link kann man mit der entsprechenden Funktion aus dem `os`-Modul erzeugen. im `shutil`-Modul gibt es Funktionen zum kopieren von Dateien.

Man kann `PiCamera.capture()` statt eines Dateinamens auch ein Dateiobjekt übergeben, also auch ein `io.BytesIO`-Objekt. Und dessen Inhalt kann man dann in zwei Dateien speichern.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ok.
Wie würde meine python Datei aussehen,
wenn ich einemal das Bild in /home/pi/bild.jpg und einmal das gleiche Bild in /home/mein.jpg speichern möchte?

Code: Alles auswählen

io.BytesIO = "/home/pi/bild.jpg"
cam.capture( io.BytesIO)

?
BlackJack

@egon11: Du müsstest ein `BytesIO`-Objekt erstellen, das als Argument an `capture()` übergeben, Dir danach vom `BytesIO`-Objekt mit der entsprechenden Methode den Inhalt geben lassen, und diesen dann in zwei Dateien speichern.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

@ BlackJack

Hast du für mich ein kleines Beispiel?
Eine Muster.py?
BlackJack

@egon11: Woran hängt es denn konkret?
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ich wollte mal ein Schematischen Aufbau haben, also die Zeilen die ich in mein Python script brauche, dass das mit "BytesIO" funktioniert.
BlackJack

@egon11: Der schematische Aufbau sind einfach ein paar Zeilen Code mit Anweisungen die linear abgearbeitet werden. Einzig das Speichern in zwei Dateien würde ich in eine Schleife über die beiden Dateinamen stecken. Und ich würde das erstellen des Bildes und das Speichern der Daten jeweils in eine Funktion stecken. Also ”schematisch”:

Code: Alles auswählen

    # ...
    image_data = capture(camera)
    for path in ['/home/pi/test.jpg', '/var/www/image.jpg']:
        save(path, image_data)
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ok danke, jetzt muss ich nur noch 'save' definieren.
Wie mache ich dass?
BlackJack

@egon11: Wieder die Gegenfrage: Woran hängt es denn konkret? Funktionen definieren kannst Du ja schon wenn Dir nur noch `save()` fehlt, denn das hast Du bei `capture()` dann ja bereits gemacht. Und Daten in eine Datei speichern sollte in jedem Grundlagentutorial vorkommen. Im Tutorial in der Python-Dokumentation gibt es beispielsweise den Abschnitt Reading and Writing Files. Am besten bis zuende, bis zur ``with``-Anweisung durcharbeiten.
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

Mit subprocess kann man doch shell Befehle absetzen.
Ich dachte man darf os.system oder os.shutil nicht nehmen?
Hab mir angewöhnt nur noch subprocess dafür zu nutzen.

Ich hätte gedacht ein Link zur Datei reicht aus. Wozu brauch man ein Bild denn zwei mal?
BlackJack

@sebastian0202: Ja zum starten von externen Programmen sollte man `subprocess` verwenden, aber wozu willst Du externe Programme starten für Sachen die man mit der Python-Standardbibliothek erledigen kann?
Antworten