Lire et écrire les données iptc dans une image jpeg (marker app13 d'adobe photoshop)

Soyez le premier à donner votre avis sur cette source.

Vue 14 892 fois - Téléchargée 1 598 fois

Description

Ce code permet de lire et d'écrire les informations contenues dans le marker APP13 (FFED) définies par Adobe Photoshop et l'IPTC (IIM) pour un fichier JPEG. Il permet aussi d'ajouter des données IPTC à un fichier qui n'en possède pas...

On trouve des infos comme le nom de l'objet, la catégorie, des mots-clés, des dates, le programme qui a écrit les données IPTC, les auteurs, le pays, le copyright...

Ce code est de moi, alors si vous l'utilisez dans une application, un petit "A propos", ca fait de mal à personne...je sais que ça fait rire certaines personnes mais bon...

Source / Exemple :


'dans le zip

Conclusion :


Il y a peut-être des bugs bien que ce code ait été bien testé...il y en a bien dans Windows lol...

Bien que le code soit commenté, il est nécessaire de lire les pages citées en références pour mieux comprendre...(http://www.iptc.org/IIM/ et http://peccatte.karefil.com/software/Metadata.htm)

N'hésitez pas à commenter et à noter...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
64
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
10 août 2007

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
Messages postés
64
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
10 août 2007

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.
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
14
salut

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

ShareVB
Messages postés
2
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
17 juin 2006

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
Messages postés
16
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
5 octobre 2012

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
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.