Visualizzazione risultati 1 fino 22 di 22
Like Tree2Likes
  • 2 Post By dreadnaut

Discussione: iptcparse e immagini info

  1. #1
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito iptcparse e immagini info

    Salve a tutti


    ho un problema con la funzione iptcparse, le immagini prese dalla cartella non corrispondono alle info di iptcparse($picinfo['APP13']),
    li visualizzo, ma i valori sono sbagliati


    Codice PHP:
    <?php
    if (empty($row->imdbid)) {
    echo
    'NO Photo';
    }else{

    $dirname = 'images_actors/*' . $row->imdbid . '/';
    $images = glob($dirname."*");
    }
    if(
    $images) {
    ?>
    <?php foreach($images as $image) { ?>



    <?php

    $picinfo
    = array();
    getimagesize($image, $picinfo);
    //echo "<pre>";
    //print_r(array_keys($picinfo));
    //echo "</pre>";

    if(isset($picinfo['APP13']))
    {
    $iptc = iptcparse($picinfo['APP13']);

    }

    if(isset(
    $picinfo['APP13']))
    {
    $iptc = iptcparse($picinfo["APP13"]);
    if (
    is_array($iptc)) {
    $description = $iptc['2#105'][0];
    $subject = $iptc['2#120'][0];
    /*
    $time = $iptc['2#055'][0];
    $year = substr($time, 0, 4);
    $month = substr($time, 4, 2);
    $day = substr($time, -2);
    $datetaken = date('l F jS Y', mktime(0, 0, 0, $month, $day, $year));
    $city = $iptc["2#090"][0];
    $country = $iptc["2#101"][0];
    $creator = $iptc["2#080"][0];
    */
    }
    }
    //print_r($subject);

    //echo "<pre>";
    //print_r($subject);
    //echo "</pre>";

    $subject2 = preg_replace('/"/', '', $subject);


    ?>
    Codice PHP:
    <a href="<?php echo $image; ?>" class="highslide" onclick="return hs.expand(this)" title="<?php echo $subject2; ?>" style="margin: 10px 15px 10px 15px">

  2. #2
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Puoi mostrare input e output se tramite testo è meglio. Ma so già che non hai pazienza. La funzione date o strtotime ritorna com'è impostato il tuo php localmente. Cioè se input è una data UTC ma il tuo php usa un timezone differente avrai output diverso dal tuo input.

  3. #3
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    ciao darbula

    mi riferisco a questo, alla descrizione (Titolo)

    questa per esempio e il file originale posizionato nella cartella



    php e iptcparse, Titolo corretto




    qui cominciano i guai, questo file



    php e iptcparse, Titolo vuoto nel file ma visualizza informazioni sbagliate

    Ultima modifica di blackskyisback : 29-11-2022 alle ore 06.17.28

  4. #4
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Puoi isolare il problema senza loop e estrai il file con la funzione glob usi getimagesize e poi successivamente iptcparse per quel singolo file e leggi i dati del tuo jpg? Un file.php senza formattazione html e il var_dump.
    Ultima modifica di darbula : 29-11-2022 alle ore 17.03.56

  5. #5
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,252

    Predefinito

    Rimuovendo commenti ed indentando, il codice sembra questo:
    Codice PHP:
    foreach($images as $image) {
    # ...

    if (isset($picinfo['APP13'])) {
    $iptc = iptcparse($picinfo["APP13"]);
    if (
    is_array($iptc)) {
    $description = $iptc['2#105'][0];
    $subject = $iptc['2#120'][0];
    }
    }

    $subject2 = preg_replace('/"/', '', $subject);

    # ...
    }
    Se una foto non ha un record APP13, $subject non viene sovrascritto, e $subject2 prende il valore della foto precedente.
    Ultima modifica di dreadnaut : 29-11-2022 alle ore 20.29.12

  6. #6
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Rimuovendo commenti ed indentando, il codice sembra questo:
    Codice PHP:
    foreach($images as $image) {
    # ...

    if (isset($picinfo['APP13'])) {
    $iptc = iptcparse($picinfo["APP13"]);
    if (
    is_array($iptc)) {
    $description = $iptc['2#105'][0];
    $subject = $iptc['2#120'][0];
    }
    }

    $subject2 = preg_replace('/"/', '', $subject);

    # ...
    }
    Se una foto non ha un record APP13, $subject non viene sovrascritto, e $subject2 prende il valore della foto precedente.
    ciao dreadnaut

    dove sta' il problema?

  7. #7
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,252

    Predefinito

    Se guardi bene lo screenshot sopra, il titolo "sbagliato" è quello della foto precedente nell'elenco.

    Sei in un ciclo foreach. Se la foto ha un titolo, lo metti dentro a $subject, poi lo elabori come $subject2 e finisce nella pagina. Se la foto non ha un titolo, prendi comunque il contenuto di $subject e lo mostri come se appartenesse alla foto. Se non c'è un titolo, devi assicurarti di non stampare nulla.

    Citazione Originalmente inviato da blackskyisback Visualizza messaggio
    dove sta' il problema?
    Siccome sono anziano, filosofo, e faccio questo di lavoro, io vedo un singolo problema dietro a molte delle tue domande: è difficile, sia per noi che per te, seguire quello che il codice sta cercando di fare. Il codice è (termine tecnico) un casino per due ragioni: l'indentazione sballata confonde le idee, ed i file sono un minestrone di php, query ed html ammucchiati assieme.

    Estrarre pezzi di codice dentro a delle funzioni rende più facile creare funzionalità complesse. Separare il php che raccoglie i dati, quello che lo elabora, e quello che crea la pagina aiuta a non confondersi ed evitare errori.
    darbula and GraphOGLRisorse like this.

  8. #8
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Se guardi bene lo screenshot sopra, il titolo "sbagliato" è quello della foto precedente nell'elenco.

    Sei in un ciclo foreach. Se la foto ha un titolo, lo metti dentro a $subject, poi lo elabori come $subject2 e finisce nella pagina. Se la foto non ha un titolo, prendi comunque il contenuto di $subject e lo mostri come se appartenesse alla foto. Se non c'è un titolo, devi assicurarti di non stampare nulla.


    Siccome sono anziano, filosofo, e faccio questo di lavoro, io vedo un singolo problema dietro a molte delle tue domande: è difficile, sia per noi che per te, seguire quello che il codice sta cercando di fare. Il codice è (termine tecnico) un casino per due ragioni: l'indentazione sballata confonde le idee, ed i file sono un minestrone di php, query ed html ammucchiati assieme.

    Estrarre pezzi di codice dentro a delle funzioni rende più facile creare funzionalità complesse. Separare il php che raccoglie i dati, quello che lo elabora, e quello che crea la pagina aiuta a non confondersi ed evitare errori.
    Io al contrario di te non sono programmatore e faccio questo per imparare, il mio lavoro e' l'opposto di questo.

    Comunque grazie lo stesso, trovero' la soluzione anche per questo.

  9. #9
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    @blackskyisback Alex sebbene è una critica non è esattamente come la pensi.
    Sarebbe tradotto nel codice
    Codice PHP:
    foreach($images as $image) {
    # ...

    if (isset($picinfo['APP13'])) {
    $iptc = iptcparse($picinfo["APP13"]);
    $subject2 = '';
    if (
    is_array($iptc)) {
    $description = $iptc['2#105'][0];
    $subject = $iptc['2#120'][0];
    $subject2 = preg_replace('/"/', '', $subject);
    }
    }

    if(
    $subject2) { // Se diverso da stringa vuota o stringa che è 0 è true
    echo 'il valore';
    }

    # ...
    } //fine foreach
    unset($subject2);
    //codice finito
    Per quale motivo creare $subject e $subject2 e non lavorare direttamente con $iptc['2#120'][0] e la sostituzione tramite espressione regolare preg_replace? Visto che poi ti è difficile seguire
    Ultima modifica di darbula : 29-11-2022 alle ore 21.33.27

  10. #10
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,252

    Predefinito

    Direi che la mia spiegazione non è stata utile Proviamo così:

    Codice PHP:
    foreach($images as $image) {
    # ...

    if (isset($picinfo['APP13'])) {
    $iptc = iptcparse($picinfo["APP13"]);
    if (
    is_array($iptc)) {
    $description = $iptc['2#105'][0];
    $subject = $iptc['2#120'][0];
    }
    }

    $subject2 = preg_replace('/"/', '', $subject);

    # ...
    }
    Il pezzo di codice che comincia con $subject2 = ... usa $subject. $subject arriva dall'if sopra. Ma se l'if non viene eseguito, $subject contiene un valore "vecchio". La soluzione è "mostra il titolo della foto solo se c'è un titolo", cioé, metti l'output del titolo dentro allo stesso if che controlla se il titolo esiste nella foto.


    Con la mia disquisizione non volevo bullarmi tipo "io so cose tu no", ma volevo indicarti una direzione, cose da imparare che non sono ovvie, ma possono aiutarti nel tuo percorso.
    Ultima modifica di dreadnaut : 29-11-2022 alle ore 21.38.14

  11. #11
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    No il mio unset marca proprio la fine del codice (come mostrare the end alla fine di un film). Se esiste $picinfo['APP13'] inizialmente $subject2 è stringa vuota e solo quando recupero $iptc['2#120'][0] scrivo nuovamente $subject2 (ad ogni iterazione il valore iniziale è stringa vuota).
    unset è la fine visiva che lui vede. (Cerco in tutti i modi di creare il punto fermo)
    Però è anche vero che $subject e $subject2 in realtà è codice ridondante poiché esiste già la rappresentazione in un'altra variabile.
    Ultima modifica di darbula : 29-11-2022 alle ore 21.49.45

  12. #12
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da darbula Visualizza messaggio
    @blackskyisback Alex sebbene è una critica non è esattamente come la pensi.
    Sarebbe tradotto nel codice
    Codice PHP:
    foreach($images as $image) {
    # ...

    if (isset($picinfo['APP13'])) {
    $iptc = iptcparse($picinfo["APP13"]);
    $subject2 = '';
    if (
    is_array($iptc)) {
    $description = $iptc['2#105'][0];
    $subject = $iptc['2#120'][0];
    $subject2 = preg_replace('/"/', '', $subject);
    }
    }

    if(
    $subject2) { // Se diverso da stringa vuota o stringa che è 0 è true
    echo 'il valore';
    }

    # ...
    } //fine foreach
    unset($subject2);
    //codice finito
    Per quale motivo creare $subject e $subject2 e non lavorare direttamente con $iptc['2#120'][0] e la sostituzione tramite espressione regolare preg_replace? Visto che poi ti è difficile seguire

    darbula

    ricevo errore

    Parse error: syntax error, unexpected '''' (T_CONSTANT_ENCAPSED_STRING) on line 710
    line 710

    Codice PHP:
    $subject2*=*'';
    dreadnaut, non ti preoccupare, si accettano consigli

  13. #13
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,252

    Predefinito

    Occhio, il Forum in questo momento sostituisce gli spazi con "non-breakable space". Se vai copia e incolla da qua, rischi di avere del codice con caratteri invisibili ed invalidi :facepalm: Quando puoi ri-copi il codice sul forum, appaiono asterischi *, come nell'ultimo spezzone sopra.

    Ho segnalato la cosa, per il momento suggerisco di copiare il codice a mano :(

  14. #14
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Occhio, il Forum in questo momento sostituisce gli spazi con "non-breakable space". Se vai copia e incolla da qua, rischi di avere del codice con caratteri invisibili ed invalidi :facepalm: Quando puoi ri-copi il codice sul forum, appaiono asterischi *, come nell'ultimo spezzone sopra.

    Ho segnalato la cosa, per il momento suggerisco di copiare il codice a mano :(
    infatti, tutto il codice ricopiato a mano perche' generava errori a sequenza

    ho provato il codice di darbula e non va bene, praticamente se non esiste il valore $iptc['2#120'][0] nel file mi nasconde le foto, ma io voglio vederle, anche se il valore e' vuoto


  15. #15
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Codice PHP:
    <?php
    foreach($images as $image) {
    // ...
    $subject2 = '';
    if (isset(
    $picinfo['APP13'])) {
    $iptc = iptcparse($picinfo["APP13"]);
    if (
    is_array($iptc)) {
    $description = $iptc['2#105'][0];
    $subject = $iptc['2#120'][0];
    $subject2 = preg_replace('/"/', '', $subject);
    }
    }
    // ...
    } //fine foreach
    ?>
    <?php
    if($subject2) {
    echo
    '<title>' . $subject2 . '</title>';
    }
    unset(
    $subject2);
    //codice finito
    //ho detto fine non esiste altro codice
    non riscontro tale problema ricopiando il mio codice e testarlo online.
    Ricordo (già da tempo) che dopo la prima
    modifica l'editor wysiwyg trasforma gli spazi in non breaking space ma il mio codice funziona lol.
    <?php è la sintassi che fa avviare il parser php mentre ?> lo chiude quindi il primo è il foreach mentre il secondo l'output html.
    $subject2 è stringa vuota o contiene il titolo non il percorso del file :(
    Se $subject2 è anche il percorso della foto lo devi creare altrove (non so dal database)
    Ultima modifica di darbula : 30-11-2022 alle ore 00.44.54

  16. #16
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da darbula Visualizza messaggio

    $subject2 è stringa vuota o contiene il titolo non il percorso del file :(
    Se $subject2 è anche il percorso della foto lo devi creare altrove (non so dal database)
    Interrompendo il foreach mi spieghi come faccio a processare 100 immagini con la descrizione?
    attualmente con le tue modifiche effettuate visualizzo solo 1 foto e con la descrizione sbagliata, dato che nel file la descrizione non esiste.



    questo e' il codice modificato (che non funziona), lo messo su pastebin dato i problemi recenti che ho riscontrato con il copia e incolla (errori ogni riga)

    https://pastebin.com/R9Gb1nid

  17. #17
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Se ti serve la seconda apertura del <?php cioè ogni $subject2 spostarlo dentro il foreach e ricorda se stringa vuota non crea il tag title.

  18. #18
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    finalmente, risolto

    codice riscritto e perfettamente funzionante

    ps: continuano i problemi del codice su questo forum, qualunque codice copiato e incollato altrove genera errori.

    Grazie a tutti per il supporto
    Ultima modifica di blackskyisback : 30-11-2022 alle ore 22.35.19

  19. #19
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    3,978

    Predefinito

    Citazione Originalmente inviato da blackskyisback Visualizza messaggio
    ps: continuano i problemi del codice su questo forum, qualunque codice copiato e incollato altrove genera errori.
    Salve,
    anche io come darbula (come menzionato qui), non riscontro tale problema.

    Io generalmente uso Notepad++ in locale sul pc. Per curiosità, che tipo di editor stai usando?

    Cordiali saluti.

  20. #20
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da GraphOGLRisorse Visualizza messaggio
    Salve,
    anche io come darbula (come menzionato qui), non riscontro tale problema.

    Io generalmente uso Notepad++ in locale sul pc. Per curiosità, che tipo di editor stai usando?

    Cordiali saluti.
    Ciao GraphOGLRisorse

    anche io , Notepad++ v.8.31 (64 bit)(locale su pc),
    il problema si e' presentato martedi 29, come segnalato anche da dreadnaut

    https://forum.it.altervista.org/php-...ml#post1484018
    Ultima modifica di blackskyisback : 01-12-2022 alle ore 06.27.16

  21. #21
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,061

    Predefinito

    Il problema si verifica con Firefox, a seguito di un loro bugfix (me l'ha segnalato dreadnaut).

    Vediamo di risolvere il problema.

    Ciao!

  22. #22
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Il problema si verifica con Firefox, a seguito di un loro bugfix (me l'ha segnalato dreadnaut).

    Vediamo di risolvere il problema.

    Ciao!
    io ho Firefox, versione 107.0.1 (x64)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •