Linux Tool für "Collagen" gesucht

  • Hallo,


    zunächst möchte ich anmerken, dass ich selber nicht sicher bin, in welche Kategorie diese Problemstellung gehört. Letztlich hat das Ganze aber etwas mit Grafik und Design zutun, weswegen ich hier gelandet bin.


    Um mein Ziel anschaulicher zu erklären hier eine wunderschöne Skizze:

    pasted-from-clipboard.png

    Das, das man dort sieht, ist das von mir erwünschte Endresultat. Um es zusammenzufassen, möchte ich als Grundlage für das Endresultat manuell eine .png Datei erstellen, die an mehreren Stellen, an denen später Fotos eingefügt werden sollen, transparent ist. Quasi existiert eine feste Vorlage als Rahmen für mehrere, wechselnde Bilder, die immer an der exakt selben Stelle eingefügt werden sollen, wobei die gegenüberliegenden Eckpunkte einzufügenden Fotos entscheidend sind (soll heißen: es muss mit verschiedenen Auflösungen passen, falls mal eine andere Kamera zum Einsatz kommt und das ganze muss gekippt werden, gerade einfügen und abschneiden ist nicht).


    Die Fragestellung: Gibt es ein Programm unter Linux, mit dem ich diesen Prozess automatisiert bzw. über die Befehlszeile ausführen kann?


    Da das ganze sicherlich nicht à la ./gibmirwasichwill --frame.png --img0.jpg --img1.jpg --magie möglich ist, denke ich eher an folgendes:

    Unter Windows ist es mir in Adobe InDesign problemlos möglich, das oben erläuterte Prozedere einmal manuell durchzuführen, die Ebenen richtig zu platzieren (eben dass der Rahmen im Vordergrund ist), sodass alles passt. Dabei arbeitet InDesign mit Verlinkungen auf meine Dateien, was zur Folge hat, dass wenn ich img0.jpg durch ein anderes Bild ersetze und das InDesign Projekt erneut öffne, alle Einstellungen auf das neue Bild übertragen werden, da es ja für das Programm dasselbe ist - es sieht nur anders aus.

    Vor diesem Hintergrund dachte ich daran, ob ähnliches auch unter Linux möglich ist: Das Prozedere einmal manuell durchführen und anschließend in der Befehlszeile je Durchlauf einmal img[0].jpg bis img[n].jpg austauschen und anschließend das Programm ausführen bzw. mir das Endresultat ausspucken lassen, sodass ich es speichern kann.


    Mein Hauptproblem: Ich bin was sowas angeht null mit Linux vertraut und daher auf eure Hilfe angewiesen; vielleicht macht hier ja jemand öfters mal etwas in Richtung Bildbearbeitung/Layout unter Linux und weiß Rat oder hat sonstige Ideen.



    Danke,

    Simon

  • warscheinlich würde ich sowas in PHP mit GD selbst irgendwie zusammen basteln, so aufwändig erscheint mir das Projekt nicht. Leider brauch ich es aktuell nicht sonst hätte ich es vermutlich geschrieben. 50 Zeilen oder weniger + weitere zeilen zum automatisieren


    php datei.php?bild1=abc.jpg&bild2=bcd.jpg&text=HalloWorld würde dann schon gehen...

    jeder der einen Schreibfehler in meinem Post findet, darf ihn Kommentarlos behalten

    P.S. gilt auch für Schignaturen ;)

  • (Zitat aus dem längsten Thema)

    Was fehlt dir denn da?

    Den anderen Diesen Thread kennst du ja bereits. Jedenfalls wollte ich gestern mal damit anfangen, die GPIO Ports vom Pi auszulesen, wo der Spaß dann schon begann. Es war schon etwas später, vielleicht lag es daran, aber ich habe kaum irgendetwas in C gefunden, Python auf jeder Seite (was ja auch klar ist, da Python auf den Pis ja anscheinend ziemlich verbreitet ist). Daher dachte ich, dass es vielleicht am einfachsten wäre, wenn ich mir die Sprache anschaue. Denn von quasi null starten tue ich auch bei C.


    Jetzt mein Unmut, der mich doch wieder in Richtung C drängt: Gerade wegen der Bildbearbeitung bin ich mir unsicher, ob der Pi überhaupt die richtige Plattform ist: Ja, er wird das vermutlich packen, aber vier Fotos einer DSLR in voller Auflösung zusammenschustern (oder meinetwegen erst zu komprimieren, aber auch das braucht Zeit), wird vermutlich eine Weile dauern. Für mich ist es egal, wenn ich das ganze testweise beim Programmieren mal ausführe, aber da das Ganze ja - sofern die Software steht und die Nachfrage zu gegebener Zeit noch da ist - in eine Fotobox soll, wäre die Zeit, die die Software braucht doch schon wichtig. Gerade, da ein Ausdruck schon lang genug dauert (zumindest wenn man sich mit nem Selphy o.ä. begnügt und nicht das X-fache ausgeben will).

    Dadurch liegt es für mich doch eher nah, das ganze auf einem richtigen Rechner mit Linux auszuführen und die Hardwareknöpfe über einen Arduino abzuwickeln. Von daher wäre C vermutlich die beste Lösung, oder wie siehst du das H6G ? (Deinem Post entnehme ich einfach mal, dass du dich mit C auskennst.)

    Auch die angesprochene GD Library steht laut Wiki für C zur Verfüfung (ja, auch für Python), was hilfreich ist.


    ---


    Zur Grafiksache:

    Ich habe die beiden Links von H6G sowie die Seite https://code.tutsplus.com/de/t…n-php-using-gd--cms-31701 mal überflogen - genauer schaue ich mir das zu gegebener Zeit an. Meine aktuelle Idee wäre: Mit GD die Bilder zurechtzudrehen und dann anschließend nacheinander mit ImageMagick auf das Ursprungsbild zu legen (so wie die Pins auf der Stadtkarte, nur dass die eingefügten Bilder in der Ebene drunter und nicht drüber landen). Vermutlich geht letzeres auch mit GD direkt, dann wäre das ganze noch besser.

  • Python auf jeder Seite (was ja auch klar ist, da Python auf den Pis ja anscheinend ziemlich verbreitet ist). Daher dachte ich, dass es vielleicht am einfachsten wäre, wenn ich mir die Sprache anschaue.

    Python für den Pi ist das GoTo für Anfänger - vorallem wenn der Pi für Anfänger vermarktet wird.

    Dabei entsteht natürlich immer der Eindruck, man könne das nur mit Linux und Python machen - und das ist falsch.


    Man kann in jeder Sprache, die für ARMhf und ARM7 kompilierbar oder interpretierbar ist auf dem Pi arbeiten.

    Man braucht nicht mal Linux, sondern kann seine Programme direkt als Kernel auf dem Prozessor ausführen (also richtig embedded).


    Letztenendes musst du entscheiden, welche Sprache du auf dem Pi benutzen willst.

    Für mich persönlich lehne ich nur Python ab, weil ich finde, dass es eine grausame Sprache ist. Insofern sehe ich mich da befangen.


    Linux hat ein Filemapping für GPIOs unter /sys/class/gpio; damit kannst du GPIO von der Shell oder in Shellskripten ansprechen.

    (Da gibt es bestimmt auch sowas wie inotify für diese Files.)

    Ebenfalls für die Shell und C/C++ gibt es WiringPi [1, 2]. Damit ist es möglich per Executable oder als C Library mit den GPIOs zu arbeiten.

    Zusätzlich gibt es noch linux/gpio.h, aber ich weiß nicht, ob dort alle Calls exportiert sind. Musst du mal gucken, ob du das in den Linux Header Files oder unter /usr/include/ irgendwo findest.


    Was richtig wehtut und zum Angeben genutzt werden kann: direkter Registerzugriff. GPIO Pins auf dem Pi sind ARM Peripherals und per Register ansprechbar.

    Bspw. für den allerersten Pi (BCM 2835) - hier gibt es dann das entsprechende Handbuch dazu. Die Registeradressen musst du umrechnen von physikalischen Busadressen auf ARM Peripheral Adressen. Beim Pi starten die Peripherals bei 0x20000000UL (UL für unsigned long) - die GPIOs starten bei 0x20200000UL


    Ein Register ist dann unsigned int lang, sodass du dir ein Array aus Registern basteln kannst.


    C
    1. volatile unsigned int* gpio = (unsigned int*) 0x20200000UL;
    2. gpio[7] = (1 << 16); //Pull high
    3. gpio[10] = (1 << 16); //Pull low


    Ob das der Linux Kernel allerdings zulässt, weiß ich nicht - habe das bisher nur ohne Kernel gemacht.

    Hier wird Pin 16 geschalten, ab Pin 32 geht es in das nächste Register (7 bzw. 10 wird dann inkrementiert).

    Vorher den Pin Mode noch entsprechend setzen. Beim BCM 2835 gehen da solche Hacks auf:


    C
    1. unsigned char freg = pin / 10;
    2. unsigned char regpos = (pin%10) * 3;
    3. gpio[freg] = (mode << regpos);
    4. //Input Mode = 0 || Output Mode = 1


    =============


    Was ImageMagick angeht dachte ich es kommt für dich in Frage, weil du ja nach einem Binary gefragt hast, was dir deine Collage erstellt und per Shell aufrufbar ist. Layers kann wohl auch Bilder drehen und ich denke, dass Layers dir da was nettes erzeugen kann.


    Edit: Links vergessen.


    1: https://github.com/WiringPi/WiringPi

    2: http://wiringpi.com/reference/

  • und was machst du wenn du das script mal später in eine HTML umgebung einbindest? Richtig, bist erst mal arbeiten...

    Du hast meine Kritik nicht verstanden, oder? Dein Beispiel funktioniert so gar nicht! X/


    Dann prüft man halt gleich die Existenz von $argv oder den Rückgabewert von php_sapi_name() und speichert alle Argumente aus Kompatibilitätsgründen in $_GET ab. Oder umgekehrt, um $_GET in Array umzuwandeln, wie man es von getopt() kennt. Das ist jetzt wirklich kein Hexenwerk und normalerweise weiß man vorher, wofür ein Script gedacht ist…


    Oder man baut es gleich sauber als eine Art Bibliothek auf, die man nachher beliebig einsetzen und mit Werten füttern kann. Dann ist das eigentliche Frontend, egal ob CLI oder CGI, quasi nur ein Mini-Wrapper für die mächtige Funktion im Hintergrund.


    Nimm mir das bitte nicht übel, aber langsam könnte man wirklich den Eindruck gewinnen, dass Du noch nicht viel ernsthaft mit PHP programmiert hast und trotzdem um jeden Preis mit Deinem "Wissen" auftrumpfen willst, egal wie falsch es ist.


    LG & schönen Sonntag :)