Salut,
J'utilise Picasa pour gérer mes photos, et il se base sur la date de prise de vue (dans les infos EXIF de l'image) pour l'ordre d'affichage. Donc si les photos ont été prises avec un appareil qui n'était pas à l'heure, ça fausse tout...
Je cherche donc à modifier par le code la date de prise de vue de mes photos (pour en corriger 300, j'ai pas trop envie de le faire à la main...).
La classe System.Drawing.Bitmap permet théoriquement de faire ça, mais ça ne semble pas marcher... j'arrive à récupérer la date et à la changer, mais après avoir enregistré, il semble que la date n'ait pas été changée. J'ai vérifié en lançant mon programme pas à pas, je lis la même date à chaque fois...
Voilà mon code :
Est-ce que vous voyez quelque chose qui ne va pas ?
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 private void ShiftPictureDate(string filename, TimeSpan ts) { FileInfo fi = new FileInfo(filename); FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite); Bitmap img = Bitmap.FromStream(fs) as Bitmap; try { System.Drawing.Imaging.PropertyItem prop = img.GetPropertyItem(0x9003); string sDate = Encoding.ASCII.GetString(prop.Value, 0, prop.Len).TrimEnd('\0'); DateTime date = DateTime.ParseExact(sDate, "yyyy:MM:dd HH:mm:ss", null); date += ts; sDate = date.ToString("yyyy:MM:dd HH:mm:ss") + "\0"; prop.Value = Encoding.ASCII.GetBytes(sDate); img.SetPropertyItem(prop); img.Save(fs, img.RawFormat); } catch (Exception e) { MessageBox.Show("Error for " + fi.Name + " : " + e.Message); } finally { fs.Close(); } }
La fonction SetPropertyItem marche bien : si je relis la propriété avant d'enregistrer, je lis bien la nouvelle valeur. J'ai l'impression que c'est l'encodeur qui ne modifie pas les infos EXIF...
Autre problème qui m'ennuie, c'est que l'image n'est pas encodée de la même façon que l'originale (l'image modifiée prend 2 fois plus de place). J'aimerais bien pouvoir modifier les infos EXIF sans toucher à l'image elle-même...
Voilà, eh bien vos idées sont les bienvenues . Notamment, si vous connaissez une bonne librairie qui sait faire ça, je suis preneur. Merci !
Partager