Gibt es eine Möglichkeit, ein "fremdes" Bild zu schreiben, damit eine Fujifilm X-Kamera es anzeigt?

Ich habe eine Paranoia wegen versehentlicher Formatierung von SD-Karten, die Fotos enthalten, die ich noch nicht hochgeladen habe. Ich versuche, vorsichtig zu sein, aber da ich manchmal mit zwei oder drei Karten jongliere, werde ich trotzdem nervös.

Ich habe ein Importskript, das Fotos einsaugt und die korrekte Übertragung überprüft, aber ich habe keine gute Möglichkeit, die SD-Karte dann als "sicher zum Löschen" zu markieren. Natürlich gibt es ein paar Dinge, die ich in der physischen Welt tun könnte (die Karte sperren und entsperren oder an einem bestimmten Ort aufbewahren usw.), aber ich bin manchmal geistesabwesend oder abgelenkt und bevorzuge den Computer passe darauf auf.

Natürlich könnte ich auch die Karte selbst als Teil des Skripts formatieren, aber ... es scheint, als würde dies tatsächlich in erster Linie eine andere mögliche Katastrophe einführen, wenn beispielsweise meine Fehlerbehandlung Fehler aufweist. Außerdem warte ich gerne bis später, um die Karte zu formatieren, weil mein Upload-Prozess nur lokal speichert, während ein Tag später das Nacht-Backup sie extern kopiert hat.

Eine Idee, die ich hatte, war, ein JPEG (oder ein anderes Bild) mit einem schönen grünen Hintergrund und dem Text "Format sicher!" auf die Karte zu schreiben. – Wenn ich das dann mit der Karte in der Kamera sehe, wüsste ich, dass ich die Formatoptionen in der Kamera auslösen muss.

Aber ich kann die Kamera anscheinend nicht dazu bringen, ein von mir erstelltes Bild tatsächlich anzuzeigen. Gibt es bestimmte Metadaten, Speicherorte oder andere Tricks, die die Kamera dazu bringen, diese Datei zu erkennen?

Was ist der Unterschied zwischen dem Löschen der Dateien durch Ihr Skript und dem Platzieren eines Bilds auf der Karte, sodass Sie die Karte vor der Kamera formatieren? Wie verhindert Letzteres die möglichen Katastrophen, die Sie davon abhalten, Ersteres zu tun?
@null Bei letzterem gibt es kein von Natur aus destruktives automatisiertes Verhalten. Nehmen wir an, ich mache einen Fehler beim Ändern des früheren Teils des Skripts und die Dateien werden sofort /dev/nulled anstatt gespeichert, und das Skript fährt fröhlich mit dem Format fort, bevor ich die Möglichkeit habe, einzugreifen. Hoppla.
Ich schätze, Sie könnten das Skript während seiner Entwicklung auf solche Fehler überprüfen? Was ist, wenn Sie die Dateien vor der Kamera löschen, während Sie geistesabwesend oder abgelenkt sind , ohne die Ergebnisse des Skripts zu überprüfen? Hoppla?! Vielleicht ist es die einfachere Lösung, ein paar SD-Karten mehr zu kaufen und während einer Sitzung / Reise niemals Dateien zu löschen.
Natürlich werde ich das tun, aber ... per Definition sind Bugs, die durchkommen, normalerweise solche, auf die Sie nicht getestet haben. Wohingegen "formatieren Sie die Karte nicht, es sei denn, sie hat die Markierung "sicher"" scheint eine ziemlich einfach zu etablierende Angewohnheit zu sein.
Welche Kamera ist es? Die meisten Fuji zeigen Bilder, die von einer anderen Kamera aufgenommen wurden, mit einem kleinen „Geschenk“-Symbol. Versuchen Sie, ein Nicht-Fuji-Image auf die Karte herunterzuladen, um zu sehen, ob es funktioniert.
Es ist die X-T10. Ich habe ein Bild in GIMP erstellt und es wurde nicht angezeigt.
Manchmal wundere ich mich über die Definition einer Fotografie-Frage hier. Wir lehnen Photoshop-Fragen oft ab. Ich denke, hier geht es mehr um den Fotografie-Workflow, aber es scheint immer noch eher bildverarbeitungsorientiert als eine "echte" Fotografie-Frage zu sein. (Obwohl ich denke, es ist eine gute Frage!)
@osullic, ja; Ich hätte es fast mit dem Schlagwort „Workflow“ versehen und versucht, es in den Kontext der Fotografie zu stellen. Wenn ich die gleiche Frage dazu gestellt hätte, um meine Kamera als provisorisches Präsentationswerkzeug zu verwenden, würde ich dafür stimmen, sie als Off-Topic zu schließen. :) Ich versuche, die gleiche Logik auch auf Photoshop-Fragen anzuwenden.
@mattdm Vor ungefähr 5 Jahren war ich in der Lage, computergenerierte Bilder auf eine SD-Karte zu injizieren und die Kamera dazu zu bringen, sie anzuzeigen. Mein Trick bestand darin, grundlegende 4:2:2-Huffman-JPEG-Bilder zu erstellen, bei denen Breite und Höhe ein Vielfaches von 8 sind. (Vermeiden Sie progressive, 4:4:4- und arithmetische Codierung.) Lassen Sie mich wissen, ob dies für Sie funktioniert oder Sie benötigen zusätzliche Information. Ich hoffe, dies kann in eine vollständige Antwort umgewandelt werden.
Während die Anwendung des OP OT sein mag, ist die Idee, Bilder, die von woanders stammen, auf der Kamera anzuzeigen, IMO vollkommen gültig (z. B. zum Anzeigen von (Portfolio-) Diashows auf einem Fernseher / Projektor, ohne dass ein anderes Gerät erforderlich ist, Portfolio immer mit des Fotografen oder das Aushängen einer Visitenkarte bei Verlust der Kamera). Außerdem ist es eine Frage des Workflows und der Kameratechnik, und für beides gibt es keinen spezialisierten Stapelaustausch. Bitte nicht schließen.

Antworten (2)

Auf die Gefahr hin, nur irrelevanten Code auszugeben, hier ist ein Perl-Programm, das ich für einen ähnlichen Zweck verwendet habe - Bilder mit einem Kartenleser auf einen Drucker übertragen (bevor ich den Drucker nahe genug lokalisieren konnte, um seine USB-Verbindung zu verwenden). Es hat einige eingebaute Annahmen (dass Kartendateisysteme unter benutzermontierbar sind /media/card/<card-type>), aber Sie sollten in der Lage sein, den Teil mount/ zu verwerfen, umountwenn er für Sie nicht relevant ist. (Wenn ich es noch einmal von Grund auf neu schreiben würde, würde ich wahrscheinlich pmountstattdessen verwenden.)

Es gibt auch einen Versuch, Nicht-JPEG-Bildern eine geeignete Thumbnail-Datei zu geben, wie von DCIM vorgeschrieben; Ich kann bestätigen, dass dies auf meiner Canon DSLR funktioniert, aber ich kann mich nicht erinnern, ob ich es auf einer Fuji getestet habe. Wenn ich es täte, wäre es auf einem F30 oder F60 compact.

FWIW, mein Kartenleseskript (nicht gezeigt) löscht jedes Bild aus dem Kartendateisystem, wenn es korrekt in mein Archivverzeichnis geschrieben (und als schreibgeschützt markiert) wurde. Ich habe eine --keepOption, dies zu überschreiben, was beim Testen von Änderungen am Skript nützlich ist. Ich formatiere die Karten nie neu.

Der Code

#!/usr/bin/perl
use strict;
use Getopt::Long;

# Usage: write-image.pl file... dest
# dest is a dcf root directory - i.e. it contains a dcim subdir.

my $verbose = '';
my $rotate = '';
my $clear = '';

GetOptions ("clear!" => \$clear,
            "rotate!" => \$rotate,
            "verbose!" => \$verbose);

my $basedir = "/media/card";
if (@ARGV < 2) {
    die "not enough arguments\n";
}

my $dest = pop;
$dest = "$basedir/$dest" unless $dest =~ /^\//;

my $mounted = -d "$dest/dcim";
unless ($mounted) {
    print "mount $dest\n" if $verbose;
    system("mount", "$dest") == 0 or die;
}

if ($clear && -d "$dest/dcim") {
    clear(<$dest/dcim/*>);
}

# scan image directories
my $dirno = 99;
my $destdir;
foreach (<$dest/dcim/*>) {
    $dirno = $1 if /\/([1-9][0-9][0-9])/;;
    $destdir = $_ if /\/([1-9][0-9][0-9])linux$/;
}

unless ($destdir) {
    die if ++$dirno > 999;
    $destdir = "$dest/dcim/${dirno}linux";
    print "Adding new directory $destdir\n" if $verbose;
    -d "$dest/dcim" or mkdir"$dest/dcim" or die;
    mkdir $destdir or die;
}

# scan files
my $fileno = 0;
foreach (<$destdir/????[0-9][0-9][0-9][0-9].*>) {
    /\/....([0-9][0-9][0-9][0-9])\..*/;
    $fileno = $1 if $1 > $fileno;
}

sub clear(@) {
    my $f;
    foreach $f (@_) {
         if (-d $f) {
             &clear(<$f/*>);
             #print STDERR "rmdir  $f\n";
             rmdir $f;
         } else {
             #print STDERR "unlink $f\n";
             unlink $f;
         }
    }
}

#do it
foreach (@ARGV) {
    if (++$fileno > 9999) {
        die if ++$dirno > 999;
        $fileno = 1;
        $destdir = "$dest/dcim/${dirno}linux";
        mkdir $destdir or die;
    }
    my $destfile = sprintf "$destdir/img_%04d", $fileno;
    my $suffix = "";
    if (/\.[^.]+\Z/) {
        $suffix = $&;
    }
    #print "$_ -> $destfile$suffix\n" if $verbose;
    print "$_: " if $verbose;   # no newline!
    if ("$suffix" eq ".jpg") {
        if ($rotate) {
            system("( jpegtran -rot 90 -perfect $_ || djpeg $_ | pnmflip -cw | cjpeg -quality 95 -dct float -sample 1x1 ) > $destfile.jpg && exiftran -g -i $destfile.jpg") == 0 || die;
        } else {
            system("exiftran", "-g", "-o", "$destfile.jpg", "$_") == 0 || die;
            print sprintf(" -> img_%04d$suffix\n", $fileno) if $verbose;
        }
    } else {
        system("/bin/cp $_ $destfile$suffix") == 0 || die "$!\n";
        system("anytopnm $_ 2>&- | pnmscale -xysize 160 120 | pnmpad -width 160 -height 120 | pnmtojpeg >$destfile.thm") ==0 || die "$!\n";
        print "\n" if $verbose;
    }
}

unless ($mounted) {
    print "umount $dest\n" if $verbose;
    system("umount", "$dest") == 0 or die;
}

Ich entschuldige mich nochmals für die Länge. Nun sollte aber klar sein, wohin das Bild im Dateisystem der Karte zu schreiben ist: Insbesondere muss es nach dem DCIM- Standard in sein, DCIM/nnnAAAAA/AAAAnnnn.extwobei es sich um eine Ziffer n, Aein beliebiges Zeichen¹ und extein JPGoder handelt, THMje nachdem, ob es sich um das Objekt selbst oder um ein handelt separates Vorschaubild. Wenn der Name nicht in dieses Muster passt, wird die Kamera ihn wahrscheinlich ignorieren.

Beachten Sie auch die Verwendung von exiftran -gzum Hinzufügen eines EXIF-Thumbnails (in der richtigen Größe) zu einem Bild, das keins hat. Das ist wahrscheinlich wichtig für Ihre Verwendung, da sich Kameras in der Regel auf die Miniaturansicht für die Bildvorschau verlassen. Das von GIMP erstellte hat wahrscheinlich die falsche Größe und kann dazu führen, dass Ihre Kamera das Bild ignoriert, einen Platzhalter anzeigt oder sogar einen Lesefehler meldet.


¹ Das heißt, jedes Zeichen innerhalb des recht eingeschränkten Satzes, der von DCIM zugelassen wird: 123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_.

Ah — ja, mein erstelltes Bild hatte kein Thumbnail und ich habe es nicht gemäß den DCIM-Spezifikationen benannt. Ich werde beides ausprobieren.
Das hat funktioniert. Ich musste das Thumbnail mit erstellen exiftran -g, da das von GIMP erstellte aus irgendeinem Grund einen Lesefehler verursacht (falsche Größe vielleicht). Eine Datei ohne Thumbnail verursacht ebenfalls einen Lesefehler. (Das heißt, wenn die Datei gemäß der DCIM-Spezifikation benannt ist; andernfalls wird sie einfach nicht verarbeitet.)
@matt, danke für die zusätzlichen Informationen; Ich habe aktualisiert. Ich denke, Sie haben herausgefunden, warum die exiftranZeile dort drin ist (ich bin auch ein GIMPer). Es ist schön zu wissen, dass es sich gelohnt hat, an meinem alten, nicht mehr verwendeten Skript festzuhalten! :-)
Eine weitere lustige Tatsache: Die Verwendung DCIM/999_AAAA/AAAA9999.JPGführt dazu, dass die Kamera einen Fehler anzeigt (ich habe die genaue Formulierung vergessen, aber etwas über das Erreichen einer numerischen Grenze) und auf nichts reagiert – Sie können die Karte nicht einmal formatieren.
Leider versagt dieser Ansatz bei meiner X-T2 total. Nicht sicher warum.

Ich weiß nicht, was erforderlich ist, um das "fremde" Bild zu erkennen, wahrscheinlich etwas im Exif ... aber für Ihr Ziel erstellen Sie einfach das Bild mit Ihrer Nachricht, mit entsprechendem Hintergrund, und machen Sie ein Foto davon, wenn Sie es anzeigen dem heimischen Computerbildschirm. Dann ist es auch schon in der Kamera.

LOL! Sehr elegant! :-)
Schreiben Sie einfach "Safe to format!" auf ein Blatt Papier mit einem Filzstift und fotografiere es. Kopieren Sie dieses Bild zurück auf jede SD-Karte, nachdem Sie die Fotos von dieser Karte hochgeladen haben.
Wenn er die Karte in die Kamera einlegt und ein Foto davon macht, um zu zeigen, dass die Bilder sicher gelöscht werden können, warum löscht er dann nicht einfach die Bilder, anstatt das Foto zu machen? Das Fotografieren scheint keine zusätzliche Sicherheitsmaßnahme hinzuzufügen.
Der springende Punkt ist, die Operation so zu skripten, dass sie ohne Nachdenken durchgeführt werden kann
WayneF und osullic bedeuten, dass sein Importskript das "richtige" Bild auf die Karte schreibt, wenn das Hochladen aller Bilder abgeschlossen ist.
@Johnny: Er wird dieses Bild auf seinen Computer übertragen und es zu einem Teil seines Drehbuchs machen.
@NicolasRaoul Er sagte, er wolle die Bilder mit der Kameraformatoption löschen, nicht aus dem Skript: Wenn ich das mit der Karte in der Kamera sehe, wüsste ich, dass ich die Formatoptionen in der Kamera auslösen müsste.
Anstatt jedes Mal ein neues "sicher zu löschendes" Bild aufzunehmen, nehmen Sie einfach ein "sicher zu löschendes" Bild auf, übertragen Sie es auf/speichern Sie es auf dem Computer, und Sie haben jetzt ein Bild, das Sie am Ende auf die Kamera kopieren können des Skripts.