LIRE ET ÉCRIRE LES DONNÉES IPTC DANS UNE IMAGE JPEG (MARKER APP13 D'ADOBE PHOTOS

cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 - 13 sept. 2004 à 00:30
cs_M51 Messages postés 63 Date d'inscription dimanche 20 novembre 2005 Statut Membre Dernière intervention 10 août 2007 - 18 mars 2006 à 15:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/26127-lire-et-ecrire-les-donnees-iptc-dans-une-image-jpeg-marker-app13-d-adobe-photoshop

cs_M51 Messages postés 63 Date d'inscription dimanche 20 novembre 2005 Statut Membre Dernière intervention 10 août 2007
18 mars 2006 à 15:03
Pour ceux que cela intéresse voici le code à rajouter pour supprimer un tag répétable ou un tag seulement:

'supprime un tag chaine
'================================
'IN OUT IPTC : donnée IPTC contenant les tags
'IN TagMarker : du tag
'IN RecordNumber : du tag
'IN DataSetNumber : du tag
'OPTIONAL IN InstanceNumber : pour les tags répétables, indique le combien-ème tag qu'il faut modifier

Public Sub DelTagString(IPTC As IPTCData, TagMarker As Byte, RecordNumber As Byte, DataSetNumber As Byte, Optional InstanceNumber As Integer = 1)
Dim x As Long, y As Long, cnt As Long 'compteurs

's'il y a des tags
If IsNothing(IPTC.Tags) = False Then
'init
cnt = 1
'pour chaque tag
For y = 0 To UBound(IPTC.Tags)
'si c'est le tag recherché
If (IPTC.Tags(y).TagMarker TagMarker) And (IPTC.Tags(y).RecordNumber RecordNumber) And (IPTC.Tags(y).DataSetNumber = DataSetNumber) Then
'si c'est le numéro de tag recherché
If y = UBound(IPTC.Tags) Then GoTo del 'si c'est le dernier tag donc on le supprime
For x = y + InstanceNumber - 1 To UBound(IPTC.Tags) - 1
'on déplace les tags d'un cran
IPTC.Tags(x).TagMarker = IPTC.Tags(x + 1).TagMarker
IPTC.Tags(x).RecordNumber = IPTC.Tags(x + 1).RecordNumber
IPTC.Tags(x).DataSetNumber = IPTC.Tags(x + 1).DataSetNumber
IPTC.Tags(x).DataSize = IPTC.Tags(x + 1).DataSize
IPTC.Tags(x).Data = IPTC.Tags(x + 1).Data
Next x
GoTo del

End If
Next y

'on supprime le dernier tag
del: ReDim Preserve IPTC.Tags(UBound(IPTC.Tags) - 1)

End If

End Sub

Après dans le module principale dans Saveinfo pour chaque code modifier comme cela:
pour un tag non répétable
If Len(txtCopyright.Text) Then AddModifyTagString JPEG.IPTC, &H1C, 2, 116, txtCopyright.Text _
Else DelTagString JPEG.IPTC, &H1C, 2, 116

pour un tag répétable je conseille de modifier la frmMain et de les gérer avec un textbox et un listbox associé, cela permet de supprimer ou d'ajouter plus facilement un tag, et de plus cela permet de gérer la taille limite des caractères. Puis dans le code
DelTagString JPEG.IPTC, &H1C, 2, 116, Numérodetag (index de l'item list).
Voila
cs_M51 Messages postés 63 Date d'inscription dimanche 20 novembre 2005 Statut Membre Dernière intervention 10 août 2007
17 mars 2006 à 18:47
Très bon code qui m'a permis de comprendre l'IPTC
juste 2 remarques non négligeable:
le code ne permet pas de supprimer un tag répetable mais que dans rajouter, de même il ne permet pas supprimer un tag.
enfin, c'est quoi ta fonction AddModifyTagBinary elle n'est pas appelé par ton programme ?
Je vais modifier le source pour pouvoir supprimer les tags.
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
3 oct. 2004 à 21:28
salut

oui, effectivement... j'avais pas vu...mais bon c'est corrigé (avec une autre erreur au passage)...

ShareVB
cs_MTO Messages postés 2 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 17 juin 2006
2 oct. 2004 à 12:12
bravo pour ce code que j'attendais

un seul hic à priori
en le compilant une erreur apparait
"Tableau attendu"
dans le module modIPTCUtils
dans
Public Sub AddModifyTagBinary(IPTC As IPTCData, TagMarker As Byte, RecordNumber As Byte, DataSetNumber As Byte, Data() As Byte, DataSize As Integer, Optional InstanceNumber As Long 1, Optional bForceAdd As Boolean False)

Ligne
ReDim Preserve IPTC.Tags(UBound(IPTC.Tags(x)) + 1)

cette routine "AddModifyTagBinary" ne semble appeler par aucune autre ligne du programme.

Peux-tu m'en dire plus ? Merci à l'avance
cs_crisdi Messages postés 16 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 5 octobre 2012
16 sept. 2004 à 11:44
ShareVB,

B R A V O ton code est génial.

Grand merci à toi pour ton ouverture d'esprit et ta réactivité !

La phase suivante c'est la fusion des deux codes en un seul n'est ce pas ?

Avec tous les onglets (Exif, Iptc, Microsoft...) réunis sur la même feuille et un menu unique pour la lecture des différents champs et l'écriture du tout dans l'esprit actuel qui est très bon !

Cela devrait être possible pour toi et franchement cela serait très fort car je n'ai pas vu cela même dans les logiciels du commerce.

crisdi
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
13 sept. 2004 à 18:54
salut

voilà, la source est maintenant complète...

ShareVB
Nix Messages postés 831 Date d'inscription samedi 15 mai 1999 Statut Membre Dernière intervention 18 juillet 2009
13 sept. 2004 à 11:30
J'ai eu un pb d'espace disk, peux-tu re-uploader ton zip stp
Merci
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
13 sept. 2004 à 00:30
Message Admin :
Pouvez vous uploader le zip a nouveau svp ?
Rejoignez-nous