2015-10-28 9 views
7

Ich möchte ein Skript schreiben, das Bilder markieren und das Tag auf der Datei speichern kann, nicht in einer externen Datenbank. Ich müsste auch die Tags aus der Datei über PHP lesen.Markieren von Bildern mit PHP

Warum möchte ich das tun?

Klicken Sie mit der rechten Maustaste auf ein Bild und wählen Sie Eigenschaften und klicken Sie dann auf Details, dann klicken Sie auf Tags und dann das Hinzufügen Ihrer Tags ist langweilig, um es gelinde auszudrücken. Ich kann keine Verknüpfung zum schnellen Hinzufügen von Tags in Windows finden, daher möchte ich ein eigenes Skript schreiben, das das ermöglicht.

Ist das möglich?

Ich weiß nicht, wenn es ist, wenn ich nach Bildern und Tags in der gleichen Zeile suche ich bekomme Bild-Tags für HTML-Tutorials oder Menschen speichern Tags in einer externen Datenbank. Ich kann nicht wirklich gute Ressourcen finden, wenn jemand einige vorschlagen kann, die ich betrachten kann, würde ich dankbar sein.

Was habe ich bisher?

Ich kann alle Bilder auf meiner Festplatte auflisten und auf ein Bild klicken und ein Popup erscheint für mich, um ein Tag einzugeben. Ich schicke dieses Tag dann an eine PHP-Datei, die darauf wartet, dass ich etwas damit mache ...

Warum möchte ich die Tags nicht in einer externen Datenbank speichern?

Ich werde meine Localhost nicht ständig laufen. Wenn ich die Bilder kopiere, sollten die Tags mitgehen.

Jede Information dazu wäre großartig.

+3

Sind Ihre Image-Tags exif? http://php.net/manual/en/book.exif.php könnte interessant sein – user3154108

+0

Vielen Dank für den Link, ich denke, das könnte einfach funktionieren. Jedoch stammen nicht alle Bilder aus der gleichen Quelle und einige haben unterschiedliche Dateitypen wie png, von dem ich nicht weiß, wie ich es taggen soll. Ich weiß, dass die Png-Spezifikation Text enthalten kann, aber ich bin mir nicht sicher, wie ich ein Tag hinzufügen soll. Ich bin im Moment bei der Arbeit, werde aber diese Lib testen, wenn ich nach Hause komme. – Chris

+1

Ich sehe keine "Tags" für PNG-Bilder unter Windows 7. Für JPG-Dateien scheinen sie Adobe XMP zu verwenden, um Tags zu speichern und sie als EXIF-Feld zu speichern (ich bin mir nicht sicher, welche). – drew010

Antwort

2

können Sie verwenden

  • iptcembed binären IPTC-Daten in ein JPEG-Bild
  • exif-read-data einbetten die EXIF-Header von JPEG zu lesen oder TIFF
  • Wie ein Titel-Tag von einem JPEG lesen Datei

    getimagesize('./phplogo.jpg', $info); 
    $title = ''; 
    if (isset($info["APP13"])) { 
        $iptc = iptcparse ($info["APP13"]); 
        $title = (isset($iptc["2#085"][0])) ? $iptc["2#085"][0] : NULL; 
    } 
    print $title; 
    

    Wie Titel-Tag zu einem JPEG
    Anmerkungen hinzuzufügen: Sie haben nur $ iptc Array zu manipulieren und zu spezifizieren Pfad
    diese Datei ist ein funktionierendes Beispiel von iptcembed

    // iptc_make_tag() function by Thies C. Arntzen 
    function iptc_make_tag($rec, $data, $value) 
    { 
        $length = strlen($value); 
        $retval = chr(0x1C) . chr($rec) . chr($data); 
    
        if($length < 0x8000) 
        { 
         $retval .= chr($length >> 8) . chr($length & 0xFF); 
        } 
        else 
        { 
         $retval .= chr(0x80) . 
            chr(0x04) . 
            chr(($length >> 24) & 0xFF) . 
            chr(($length >> 16) & 0xFF) . 
            chr(($length >> 8) & 0xFF) . 
            chr($length & 0xFF); 
        } 
    
        return $retval . $value; 
    } 
    
    // Path to jpeg file 
    $path = './phplogo.jpg'; 
    
    // Set the IPTC tags 
    $iptc = array(
        '2#085' => 'Anis TITLE' 
    ); 
    
    // Convert the IPTC tags into binary code 
    $data = ''; 
    
    foreach($iptc as $tag => $string) 
    { 
        $tag = substr($tag, 2); 
        $data .= iptc_make_tag(2, $tag, $string); 
    } 
    
    // Embed the IPTC data 
    $content = iptcembed($data, $path); 
    
    // Write the new image data out to the file. 
    $fp = fopen($path, "wb"); 
    fwrite($fp, $content); 
    fclose($fp); 
    

    Hier die complet Liste der IPTC-Indizes

    DEFINE('IPTC_OBJECT_NAME',      '2#005'); 
    DEFINE('IPTC_EDIT_STATUS',      '2#007'); 
    DEFINE('IPTC_PRIORITY',       '2#010'); 
    DEFINE('IPTC_CATEGORY',       '2#015'); 
    DEFINE('IPTC_SUPPLEMENTAL_CATEGORY',   '2#020'); 
    DEFINE('IPTC_FIXTURE_IDENTIFIER',    '2#022'); 
    DEFINE('IPTC_KEYWORDS',       '2#025'); 
    DEFINE('IPTC_RELEASE_DATE',      '2#030'); 
    DEFINE('IPTC_RELEASE_TIME',      '2#035'); 
    DEFINE('IPTC_SPECIAL_INSTRUCTIONS',    '2#040'); 
    DEFINE('IPTC_REFERENCE_SERVICE',    '2#045'); 
    DEFINE('IPTC_REFERENCE_DATE',     '2#047'); 
    DEFINE('IPTC_REFERENCE_NUMBER',     '2#050'); 
    DEFINE('IPTC_CREATED_DATE',      '2#055'); 
    DEFINE('IPTC_CREATED_TIME',      '2#060'); 
    DEFINE('IPTC_ORIGINATING_PROGRAM',    '2#065'); 
    DEFINE('IPTC_PROGRAM_VERSION',     '2#070'); 
    DEFINE('IPTC_OBJECT_CYCLE',      '2#075'); 
    DEFINE('IPTC_BYLINE',       '2#080'); 
    DEFINE('IPTC_BYLINE_TITLE',      '2#085'); 
    DEFINE('IPTC_CITY',        '2#090'); 
    DEFINE('IPTC_PROVINCE_STATE',     '2#095'); 
    DEFINE('IPTC_COUNTRY_CODE',      '2#100'); 
    DEFINE('IPTC_COUNTRY',       '2#101'); 
    DEFINE('IPTC_ORIGINAL_TRANSMISSION_REFERENCE', '2#103'); 
    DEFINE('IPTC_HEADLINE',       '2#105'); 
    DEFINE('IPTC_CREDIT',       '2#110'); 
    DEFINE('IPTC_SOURCE',       '2#115'); 
    DEFINE('IPTC_COPYRIGHT_STRING',     '2#116'); 
    DEFINE('IPTC_CAPTION',       '2#120'); 
    DEFINE('IPTC_LOCAL_CAPTION',     '2#121'); 
    
    +0

    Wenn ich versuche, die Tags mit exif_read_data zu lesen, bekomme ich Folgendes: ["Keywords"] => string (22) "??????????????????????" ["UndefinedTag: 0xEA1C"] hast du eine Idee? – Chris

    +0

    Die iptcembed-Funktion funktioniert jedoch wie ein Charme. – Chris

    +0

    Vielen Dank, dass Sie Ihrer Antwort Beispielcode hinzugefügt haben. Ich habe kein Problem mit dem Hinzufügen der Tags mit iptcembed, aber ich habe Probleme, die Schlüsselwörter zu bekommen. Wenn ich exif_read_data verwende, bekomme ich Müll, wie ich im obigen Kommentar erwähnt habe. Wenn ich den Beispielcode für 2 # 025 (Keywords/Tags) verwende, funktioniert es nicht. Wenn ich $ info ["APP13"] var_dump, bekomme ich eine wirklich lange Zeichenfolge, aber iptcparse kehrt mit FALSE zurück.Windows liest die Daten korrekt und ich kann sehen, dass die Tags hinzugefügt werden. Ich komme einfach nicht mehr zu ihnen. Irgendwelche Tipps? Danke für deine Mühe. – Chris

    2

    Sie PHPExiftool Metadaten in einer Datei zu schreiben, verwenden könnte als (Zitat aus der Github Seite) folgt:

    <?php 
    
    require __DIR__ . '/vendor/autoload.php'; 
    
    use Monolog\Logger; 
    use PHPExiftool\Writer; 
    use PHPExiftool\Driver\Metadata\Metadata; 
    use PHPExiftool\Driver\Metadata\MetadataBag; 
    use PHPExiftool\Driver\Tag\IPTC\ObjectName; 
    use PHPExiftool\Driver\Value\Mono; 
    
    $logger = new Logger('exiftool'); 
    $Writer = Writer::create($logger); 
    
    $bag = new MetadataBag(); 
    $bag->add(new Metadata(new ObjectName(), new Mono('Pretty cool subject'))); 
    
    $Writer->write('image.jpg', $bag); 
    

    Und für den Fall, möchten Sie den Überblick über die Metadaten halten Sie Sie leicht geschrieben haben könnte Verwenden Sie php's md5_file() function, um einen Bezeichner der Datei zu erhalten, deren Metadatas Sie geändert haben, und schreiben Sie dann eine Zeile in eine Textdatei mit dem resultierenden Hash, gefolgt von den Meta-Daten, getrennt durch ein Trennzeichen wie "," (Komma). Jede Zeile in dieser Textdatei würde eine Datei darstellen, die von Ihrem Skript geändert wurde.

    +0

    Danke, das sieht sehr vielversprechend aus. Ich werde das definitiv testen, wenn ich nach Hause komme. Wenn es funktioniert, werde ich diese Antwort als Antwort markieren. Das wird in ungefähr 8 Stunden ungefähr sein. – Chris

    +0

    Ich war noch nie gut darin, GitHub Code arbeiten zu lassen ... jeder scheint einen Composer zu benutzen, von dem ich keine Ahnung habe, wie er funktioniert. Ich habe Erfolg mit der Antwort von Halayem Anis bekommen, nur dass ich die Daten nicht mehr lesen kann. Ich habe einen anderen Wrapper für das Exiftool gefunden, der aktueller ist, also werde ich das probieren. Danke für den Vorschlag. – Chris

    +0

    Sie sollten nach einem "Einstieg" auf Komponisten suchen, es ist es definitiv wert. – WhoIsJohnDoe