IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

écrire des données iptc [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de lesitadom39
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2015
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2015
    Messages : 112
    Points : 82
    Points
    82
    Par défaut écrire des données iptc
    bonjour,
    j'ai trouvé un tuto qui traite se sujet avec un passage par "array"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    $chemin_image="dossier-images/image.jpg";
    $iptc = array('2#105' => 'titre', '2#120' => 'Commentaire', '2#122' => 'Auteur');
    $iptcdata = NULL; #1
    foreach($iptc as $tag => $string)#2
    {
       $tag = substr($tag, 2); #3
       $iptcdata .= transformer_iptc($tag, $string); #4
    }
    function transformer_iptc($data, $value)
    {
       $length = strlen($value);
       $retval = chr(0x1C).chr(2).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;
    }
    fichier = fopen($chemin_image, "wb"); # Ouverture du fichier
    fwrite($fichier, $donnees); # Écriture du fichier
    fclose($fichier); # Fermeture du fichier
    je voudrais passer les valeurs contenues dans '2#105'et '2#120' dans un formulaire de ce style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	<form role="form" id="dom-form" action="formiptc.php" method="post" name="formulaire" onsubmit="return validation();"  enctype="multipart/form-data" autocomplete="on">          
    					<div class="form-group"> 
    						<label class="control-label " for="iptctitre">Titre</label>
    						<input class="form-control" id="iptctitre" name="iptctitre" type="text"/>
    					</div>
    					<div class="form-group"> 
    						<label class="control-label " for="iptcom">Commentaire</label>
    						<textarea class="form-control" cols="40" id="iptcom" name="iptcom" rows="10"></textarea>
    					</div>
    					<div class="form-group">
    						<button class="btn btn-primary " name="submit" type="submit">Envoi</button>
    					</div>
    				</form>
    Je bloque pour remplacer l'array.
    Merci à l'avance pour votre aide

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Tu peux garder ton array
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $iptc = array('2#105' => 'titre', '2#120' => 'Commentaire', '2#122' => 'Auteur');
    qui te permet en gros d'avoir des valeurs par défaut.

    Puis ensuite tu récupère les valeurs du formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(!empty($_POST['iptctitre']))
        $iptc['2#105'] = $_POST['iptctitre'];
     
    // etc ...
    Idéalement il faudrait sans doute vérifier les données recues pour être certains de ne pas écrire n'importe quoi dans tes metadata.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier Avatar de lesitadom39
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2015
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2015
    Messages : 112
    Points : 82
    Points
    82
    Par défaut
    Merci pour la réponse
    j'essaye avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    $filename = $_POST["filename"]; 
    $file = basename($filename);
    $chemin_image= $filename;
    if(!empty($_POST['iptctitre']))    $iptc['2#105'] = $_POST['iptctitre'];
    if(!empty($_POST['iptcom']))    $iptc['2#120'] = $_POST['iptcom'];
    $iptc = array('2#105' => 'titre', '2#120' => 'Commentaire', '2#122' => 'Auteur');
    $iptcdata = NULL; #1
    foreach($iptc as $tag => $string)#2
    {
       $tag = substr($tag, 2); #3
       $iptcdata .= transformer_iptc($tag, $string); #4
    }
    function transformer_iptc($data, $value)
    {
       $length = strlen($value);
       $retval = chr(0x1C).chr(2).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;
    }
    $donnees = iptcembed($iptcdata, $chemin_image);
    $fichier = fopen($chemin_image, "wb"); # Ouverture du fichier
    fwrite($fichier, $donnees); # Écriture du fichier
    fclose($fichier); # Fermeture du fichier
    echo $iptctitre;
    echo $iptcom;
    mais çà me mets les valeurs par défaut et non celles de mes variables.

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    C'est que les données ne sont pas correctement transmisent en post.

    Que donne ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier Avatar de lesitadom39
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2015
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2015
    Messages : 112
    Points : 82
    Points
    82
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    array(3) { ["iptctitre"]=> string(18) "panorama du musée" ["iptcom"]=> string(19) "Moirans en montagne" ["submit"]=> string(0) "" }
    et mon "form"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <form role="form" id="dom-form" action="formiptc.php" method="post" name="formulaire" onsubmit="return validation();"  enctype="multipart/form-data" autocomplete="on">          
    					<div class="form-group"> <!-- Name field -->
    						<label class="control-label " for="iptctitre">Titre</label>
    						<input class="form-control" id="iptctitre" name="iptctitre" type="text"/>
    					</div>
    					<div class="form-group"> <!-- Message field -->
    						<label class="control-label " for="iptcom">Commentaire</label>
    						<textarea class="form-control" cols="40" id="iptcom" name="iptcom" rows="10"></textarea>
    					</div>
    					<div class="form-group">
    						<button class="btn btn-primary " name="submit" type="submit">Envoi</button>
    					</div>
    				</form>

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Citation Envoyé par lesitadom39 Voir le message
    mais çà me mets les valeurs par défaut et non celles de mes variables.
    Regarde en ligne 5 et 6 de ton code, tu définis $iptc['2#105'] et $iptc['2#120'] puis en ligne 7 tu écrases le contenu de la variable $iptc avec tes valeurs par défaut.

    Il faudrait écrire ton code beaucoup plus proprement et lisiblement...
    Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if ( ! empty($_POST['iptctitre'])) {
        $iptc['2#105'] = $_POST['iptctitre'];   
    }
     
    if ( ! empty($_POST['iptcom'])) {
        $iptc['2#120'] = $_POST['iptcom'];   
    }
     
    // injection des valeurs par défaut si nécessaire
    $iptc += ['2#105' => 'titre', '2#120' => 'Commentaire', '2#122' => 'Auteur'];
    ou avec l'opérateur ternaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $iptc          = [];
    $iptc['2#105'] = empty($_POST['iptctitre']) ? 'titre'       : $_POST['iptctitre']; 
    $iptc['2#120'] = empty($_POST['iptcom'])    ? 'Commentaire' : $_POST['iptcom'];
    $iptc['2#122'] = 'Auteur';

  7. #7
    Membre régulier Avatar de lesitadom39
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2015
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2015
    Messages : 112
    Points : 82
    Points
    82
    Par défaut
    Nouvel essai avec tes modifications
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    <?php
    $filename = $_POST["filename"]; 
    $file = basename($filename);
    $chemin_image= $filename;
    $iptctitre = $_POST["iptctitre"]; 
    $iptcom = $_POST["iptcom"];
    $iptc          = [];
    $iptc['2#105'] = empty($_POST['iptctitre']) ? 'titre'       : $_POST['iptctitre']; 
    $iptc['2#120'] = empty($_POST['iptcom'])    ? 'Commentaire' : $_POST['iptcom'];
    $iptc['2#122'] = 'Auteur';
    $iptcdata = NULL; 
    foreach($iptc as $tag => $string)
    {
       $tag = substr($tag, 2);
       $iptcdata .= transformer_iptc($tag, $string); 
    }
    function transformer_iptc($data, $value)
    {
       $length = strlen($value);
       $retval = chr(0x1C).chr(2).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;
    }
    $donnees = iptcembed($iptcdata, $chemin_image);
    $fichier = fopen($chemin_image, "wb"); # Ouverture du fichier
    fwrite($fichier, $donnees); # Écriture du fichier
    fclose($fichier); # Fermeture du fichier
    var_dump($_POST)
    ?>
    et je récupère toujours les valeurs par défaut.
    le var_dump donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(3) { ["iptctitre"]=> string(15) "source du Lizon" ["iptcom"]=> string(13) "dans le doubs" ["submit"]=> string(0) "" }

  8. #8
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Deux choses.

    1 - (en tous cas sur mon pc) la définition de la fonction transformer_iptc se trouve après son utilisation et ça fait planter le script.
    2 - le commentaire du formulaire se retrouve comme titre dans mon image et le titre ou l'auteur n'apparaissent pas.

    Saisie des données :
    Nom : Capture20180818_002.JPG
Affichages : 219
Taille : 29,2 Ko

    Après submit :
    Nom : Capture20180818_003.JPG
Affichages : 214
Taille : 28,5 Ko

    Données de la photo :
    Nom : Capture20180818_004.JPG
Affichages : 237
Taille : 47,4 Ko
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  9. #9
    Membre régulier Avatar de lesitadom39
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2015
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2015
    Messages : 112
    Points : 82
    Points
    82
    Par défaut
    Tu as au moins un résultat!!
    Peux tu donner le détail de ton php, STP?

  10. #10
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Voici.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <?php
    function transformer_iptc($data, $value)
    {
       $length = strlen($value);
       $retval = chr(0x1C).chr(2).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;
    } if (isset($_POST['submit']))
    {
     $filename      = $_POST["filename"]; 
     $file          = basename($filename);
     $chemin_image  = $filename;
     $iptctitre     = $_POST["iptctitre"]; 
     $iptcom        = $_POST["iptcom"];
     $iptc          = [];
     $iptc['2#105'] = empty($_POST['iptctitre']) ? 'titre'       : $_POST['iptctitre']; 
     $iptc['2#120'] = empty($_POST['iptcom'])    ? 'Commentaire' : $_POST['iptcom'];
     $iptc['2#122'] = 'Auteur';
     $iptcdata = ""; 
     foreach($iptc as $tag => $string)
     {
        $tag = substr($tag, 2);
        $iptcdata .= transformer_iptc($tag, $string); 
     }
     
     
     $donnees = iptcembed($iptcdata, $chemin_image);
     $fichier = fopen($chemin_image, "wb"); # Ouverture du fichier
     fwrite($fichier, $donnees); # Écriture du fichier
     fclose($fichier); # Fermeture du fichier
     var_dump($iptc);
    }
    ?>
    <form role="form" id="dom-form" action="formiptc.php" method="post" name="formulaire"  enctype="multipart/form-data" autocomplete="on">   
               <div class="form-group"> 
          <label class="control-label " for="filename">Fichier</label>
          <input class="form-control" id="filename" name="filename" type="text"/>
         </div>
         <div class="form-group"> 
          <label class="control-label " for="iptctitre">Titre</label>
          <input class="form-control" id="iptctitre" name="iptctitre" type="text"/>
         </div>
         <div class="form-group"> 
          <label class="control-label " for="iptcom">Commentaire</label>
          <textarea class="form-control" cols="40" id="iptcom" name="iptcom" rows="10"></textarea>
         </div>
         <div class="form-group">
          <button class="btn btn-primary " name="submit" type="submit">Envoi</button>
         </div>
    </form>
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  11. #11
    Membre régulier Avatar de lesitadom39
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2015
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2015
    Messages : 112
    Points : 82
    Points
    82
    Par défaut
    Merci,
    tout fonctionne et au bon endroit avec ton code à peine modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    <?php
    $filename = $_POST["filename"]; 
    $file = basename($filename);
    $chemin_image  = $filename;
    function transformer_iptc($data, $value)
    {
       $length = strlen($value);
       $retval = chr(0x1C).chr(2).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;
    } 
    if (isset($_POST['submit']))
    {
     $iptctitre     = $_POST["iptctitre"]; 
     $iptcom        = $_POST["iptcom"];
     $iptc          = [];
     $iptc['2#105'] = empty(utf8_encode($_POST['iptctitre'])) ? 'titre'       : $_POST['iptctitre']; 
     $iptc['2#120'] = empty(utf8_encode($_POST['iptcom']) )   ? 'Commentaire' : $_POST['iptcom'];
     $iptc['2#122'] = 'Auteur';
     $iptc['2#116'] = 'Copyright 2018-2019, Vision Photo Jura';
     $iptc['2#092'] = 'Bourgogne Franche-Comté';
     $iptcdata = ""; 
     foreach($iptc as $tag => $string)
     {
        $tag = substr($tag, 2);
        $iptcdata .= transformer_iptc($tag, $string); 
     }
     $donnees = iptcembed($iptcdata, $chemin_image);
     $fichier = fopen($chemin_image, "wb"); # Ouverture du fichier
     fwrite($fichier, $donnees); # Écriture du fichier
     fclose($fichier); # Fermeture du fichier
     var_dump($iptc);
    }
    ?>
    reste juste les problèmes d'accentuation
    Nom : Édition des données IPTC (1).png
Affichages : 218
Taille : 11,5 Ko
    Je continue!!!Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/05/2009, 14h31
  2. Passer un filestream via wcf et y écrire des données
    Par teddyalbina dans le forum Windows Communication Foundation
    Réponses: 4
    Dernier message: 22/03/2009, 22h10
  3. Réponses: 1
    Dernier message: 13/11/2007, 16h35
  4. [MySQL] Comment écrire des données de la bdd dans un fichier
    Par sandddy dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/11/2007, 16h13
  5. Réponses: 5
    Dernier message: 22/02/2007, 12h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo