Lire et écrire les metadonnées exif, iptc, png, gif (format tiff, jpeg, png, gif, bmp)

Soyez le premier à donner votre avis sur cette source.

Vue 34 692 fois - Téléchargée 8 915 fois

Description

Ce code permet de lire et d'écrire les données EXIF, IPTC dans les TIFF et JPEG et le commentaire JPEG. Il permet aussi de lire et modifier les données textuelles des PNG et GIF.
Ce code est entièrement objet (enfin du moins pour ce que VB6 sait en faire).

Ce projet a été testé avec une trentaine de fichiers différents.

Pour EXIF :
Ce code permet de lire et de modifier les propriétés EXIF stockées dans les images JPEG et TIFF comme dans l'onglet "Résumé" des propriétés des fichiers et certains tags EXIF (ImageDescrition, Auteur, et tous les tags ascii...).

Ce projet prend en charge les makernotes qui ont la forme d'IFD. Il se peut toutefois que les valeurs lues soient incorrectes car la plus part des logiciels qui modifient les images (Windows en premier) ne mettent pas à jour les offsets dans l'IFD ce qui les rend invalides. Dans ce cas, lors de l'enregistrement, les données existantes ne sont pas modifiées. En consèquence, seules les photos provenants directement et sans modification (ou d'un logiciel qui prend en charge les makernotes) peuvent être lues correctement pour extraire les makernotes. Les makernotes sont non documentées par les fabricants : tous les tags ne sont donc pas connus avec assurance...

Pour IPTC :
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 et dans le tag EXIF IPTC.NAA pour les TIFF...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...

Pour PNG : il assure la lecture et l'écriture des chunks de commentaires même compressés...

Pour GIF : il assure la lecture et l'écriture du commentaire

Ce code est un rassemblement de deux autres de mes sources (EXIF et IPTC) auquel j'ai ajouté PNG et GIF.

Pour utiliser la lecture/écriture PNG, il faut que vous téléchargiez la dll Zlib (http://www.winimage.com/zLibDll/) et la mettre dans system32 renommée en zlib.dll...

ATTENTION : faites toujours une copie de vos fichiers au cas où un bug les rendrait illisible. Je ne serais être tenu responsable d'une perte de donnée...une lecture est toujours sûre, une écriture jamais...

Source / Exemple :


'dans le zip

Conclusion :


Pour utiliser la lecture/écriture PNG, il faut que vous téléchargiez la dll Zlib (http://www.winimage.com/zLibDll/) et la mettre dans system32 renommée en zlib.dll...

ATTENTION : faites toujours une copie de vos fichiers au cas où un bug les rendrait illisible. Je ne serais être tenu responsable d'une perte de donnée...une lecture est toujours sûre, une écriture jamais...

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

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
samedi 12 novembre 2011
Statut
Membre
Dernière intervention
13 novembre 2011

Bonjour.
Je me permets de prendre contact avec vous, bien que je ne sois pas développeur professionnel : je ne me sers que de VBA.
J’aurais voulu me constituer sous Office Access 2007 (Windows XP) une base de données pour mes images, mais je souhaite à la fois lire les informations IPTC et les écrire pour qu’elles puissent être conservées indépendamment de la base.
(Je me sers pour le moment de XnView, mais l’interface ne me convient pas.)
D’après ce que je comprends, vos formulaires (frmMain.frm par exemple) sont prévus pour fonctionner indépendamment et non depuis une application Office.
La question est donc : y a-t-il un moyen d’utiliser votre code depuis VBA (lire et écrire les IPTC) ?
Merci d’avance pour votre réponse.
Messages postés
492
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
2 juillet 2012
2
Merci de ta réponse, je dois faire une erreur quelque part ! je testerais à nouveau.
A+
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
16
salut Lermite222,

Dsl de la réponse tardive.

si c'est big endian, B9C8 doit donner &hB9C8 et 0003 doit donner &h0003.
Si c'est little endian, B9C8 doit donner &hC8B9 et 0003 doit donner &h0300.

Je ne vois rien d'anormal dans la gestion de l'endianess dans le code de CopyMemory.

ShareVB
Messages postés
492
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
2 juillet 2012
2
Bonjour,
Tout d'abord, bravo pour le travail de documentation que cela a dù te prendre.
Je ne me sert pas de ton code qui ne convient pas à ce que je veux faire et je tombe sur un "os", tu emploi l'API CopyMemory pour transférer les données, j'emploi une autre méthode mais là n'est pas mon propos.
Quand tu est avec le type motorola tu inverse les 2 ou 4 bytes, c'est OK quand les derniers bytes ne sont pas à zéro mais si oui...
Ex 1 : &hB9 - &hC8 .. en sortie ont a donc &hC8B9, c'est OK j'ai la même chose
Ex 2 : &h00 - &h03 .. En sortie il me semble que celà devrait faire &h300 or en sortie de ta fonction CopyMemory j'ai &h3 ?
Je dois dire que je ne comprend pas ! j' contrôler le processus dans ta fonction et il me semble être conforme !
Si tu suis encore cette source aurais-tu une explication.
Merci.
A+
Messages postés
1
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
27 septembre 2009

Dear Sir,

Well done, but I think there is an error in the CExifDirEnt.cls.

=================================
Case &H190&
GetTagName = "GlobalParametersIFD"
Data = GetDataFormatted()
Case &H190&
GetTagName = "ProfileType"
Select Case GetDataVariant()
Case 0
Data = "Unspecified"
Case 1
Data = "Group 3 FAX"
End Select
=================================

Must the second &H190& not be &H191&> "ProfileType" ??
Because &H190& => "GlobalParametersIFD" !!

Found this on the URL=
http://www.awaresystems.be/index.html


Best regards
Afficher les 11 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.