Bonjour à tous,
je développe une application dans laquelle je stock des images dans ma base.
Je souhaiterais lire et extraire les données EXIF et les stoker dans une table de ma base. Alors comment peut on lire ces donnée en C#?
Bonjour à tous,
je développe une application dans laquelle je stock des images dans ma base.
Je souhaiterais lire et extraire les données EXIF et les stoker dans une table de ma base. Alors comment peut on lire ces donnée en C#?
La librairie EXIFextractor devrait répondre à ta problématique
Less Is More
Pensez à utiliser les boutons , et les balises code
Desole pour l'absence d'accents, clavier US oblige
Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.
Je vous fait un retour sous peu
j'ai l'erreur suivante:
alors que j'ai bien importé la reférence et:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 The type or namespace name 'Goheer' could not be found (are you missing a using directive or an assembly reference?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 using Goheer; using Goheer.EXIF;
Une solution?
C'est bizarre Tu développes avec quelle version du framework ?
Less Is More
Pensez à utiliser les boutons , et les balises code
Desole pour l'absence d'accents, clavier US oblige
Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.
Je vois que tu as mis les directives Using ... Très bien.
Mais as tu rajouté la librairie dans les références de ton projet ?
Articles sur les technologies .NET
Une réponse vous a aidé ? utilisez le bouton
Votre problème est résolu ? utilisez le bouton
Bonjour à tous,
infosam76, j'ai bel et bien rajouté la librairie dans les références de ton projet!
la version de mon framework est 4.
en m'appuyant sur le topique ici j'ai utiliser exiftool de la manière suivante:
Les infos s'affichent correctement dans le textBox
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 public string[] CmdLineApplication(string exePath, string Arguments = "") { Process Proc = new Process(); Proc.StartInfo.FileName = exePath; Proc.StartInfo.Arguments = Arguments; Proc.StartInfo.UseShellExecute = false; Proc.StartInfo.RedirectStandardOutput = true; Proc.StartInfo.CreateNoWindow = true; Proc.Start(); string cmdOutPut = Proc.StandardOutput.ReadToEnd(); Proc.WaitForExit(); char[] mVblf="\n".ToCharArray(); string[] cmdOutPuts = cmdOutPut.Split(mVblf); return cmdOutPuts; } textBox1=textBox1.Lines = CmdLineApplication(Application.StartupPath.ToString()+"\\"+"exiftool(-k).exe", "C:\\exiftollexe\\20130920_071339.jpg");Comment récupérer exactement l'information qui m'interesse? Ici je souhaite récupérer Longitude, Latitude et Position pour les stoker dans ma base.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159 ExifTool Version Number : 9.37 File Name : 20130920_071339.jpg Directory : C:/exiftollexe File Size : 84 kB File Modification Date/Time : 2013:09:20 07:55:57+00:00 File Access Date/Time : 2013:09:25 10:00:24+00:00 File Creation Date/Time : 2013:09:25 10:00:24+00:00 File Permissions : rw-rw-rw- File Type : JPEG MIME Type : image/jpeg JFIF Version : 1.01 Resolution Unit : inches X Resolution : 72 Y Resolution : 72 Exif Byte Order : Big-endian (Motorola, MM) Make : SAMSUNG Camera Model Name : GT-I9300 Orientation : Horizontal (normal) Software : Microsoft Windows Photo Viewer 6.1.7600.16385 Modify Date : 2013:09:20 07:51:20 Y Cb Cr Positioning : Centered Exposure Time : 1/100 F Number : 2.6 Exposure Program : Aperture-priority AE ISO : 100 Exif Version : 0220 Date/Time Original : 2013:09:20 07:13:39 Create Date : 2013:09:20 07:13:39 Components Configuration : Y, Cb, Cr, - Shutter Speed Value : 1/100 Aperture Value : 2.6 Brightness Value : 4.63671875 Exposure Compensation : 0 Max Aperture Value : 2.6 Metering Mode : Center-weighted average Flash : No Flash Focal Length : 3.7 mm Maker Note Version : 0100 Warning : Invalid EXIF text encoding User Comment : ... Sub Sec Time Original : 00 Sub Sec Time Digitized : 00 Flashpix Version : 0100 Color Space : sRGB Exif Image Width : 3264 Exif Image Height : 2448 Exposure Mode : Auto White Balance : Auto Scene Capture Type : Standard Image Unique ID : ZDFI02 GPS Version ID : .. GPS Latitude Ref : North GPS Longitude Ref : West GPS Altitude Ref : Above Sea Level GPS Time Stamp : 07:13:21 GPS Processing Method : GPS Date Stamp : 2013:09:20 Padding : (Binary data 2060 bytes, use -b option to extract) Offset Schema : 60 About : uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b Creator Tool : Microsoft Windows Photo Viewer 6.1.7600.16385 Image Width : 640 Image Height : 480 Encoding Process : Baseline DCT, Huffman coding Bits Per Sample : 8 Color Components : 3 Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2) Aperture : 2.6 GPS Altitude : 122 m Above Sea Level GPS Date/Time : 2013:09:20 07:13:21Z GPS Latitude : 5 deg 23' 9.00" N GPS Longitude : 4 deg 1' 17.00" W GPS Position : 5 deg 23' 9.00" N, 4 deg 1' 17.00" W Image Size : 640x480 Shutter Speed : 1/100 Create Date : 2013:09:20 07:13:39.00 Date/Time Original : 2013:09:20 07:13:39.00 Focal Length : 3.7 mm Light Value : 9.4
Merci d'avance.
C'est une solution mais tu vas tout récupérer à chaque fois. Est-ce que tu as récupéré les sources du projet ? Ou bien le projet de démo seulement ?
Si tu veux pouvoir choisir, il vaut mieux récupérer les sources et recompiler la DLL. Ensuite tu remets la référence dans ton projet vers la DLL, tu remets les using, et ça devrait marcher. Je pense que tu as dû rater quelque chose, j'ai testé chez moi et ça marche nickel.
Less Is More
Pensez à utiliser les boutons , et les balises code
Desole pour l'absence d'accents, clavier US oblige
Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.
C'est un peu redondant, non ? Vu que la position contient la latitude et la longitude
Soit dit en passant, pas besoin d'utiliser une librairie spécifique pour lire la position ; tu peux le faire directement avec le .NET Framework. Voilà une méthode d'extension qui lit la position d'une image :
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 using System.Drawing; using System.Drawing.Imaging; public static class ExifExtensions { static string ReadExifString(this PropertyItem propertyItem) { return Encoding.ASCII.GetString(propertyItem.Value, 0, propertyItem.Len - 1); } static double ReadRational(this PropertyItem propertyItem) { uint numerator = BitConverter.ToUInt32(propertyItem.Value, 0); uint denominator = BitConverter.ToUInt32(propertyItem.Value, 4); return (double)numerator / denominator; } static double[] ReadRationals(this PropertyItem propertyItem) { int nValue = propertyItem.Len / 8; double[] values = new double[propertyItem.Len / 8]; for (int i = 0; i < nValue; i++) { uint numerator = BitConverter.ToUInt32(propertyItem.Value, 8 * i); uint denominator = BitConverter.ToUInt32(propertyItem.Value, 8 * i + 4); values[i] = (double)numerator / denominator; } return values; } private static double DMSToDecimal(double[] dms) { return dms[0] + dms[1] / 60 + dms[2] / 3600; } public static GpsPosition GetGPSPosition(this Image image) { if (!image.PropertyIdList.Contains(0x0000)) return null; string latitudeRef = image.GetPropertyItem(0x0001).ReadExifString(); double[] latitudeDMS = image.GetPropertyItem(0x0002).ReadRationals(); double latitude = DMSToDecimal(latitudeDMS); if (latitudeRef == "S") latitude *= -1; string longitudeRef = image.GetPropertyItem(0x0003).ReadExifString(); double[] longitudeDMS = image.GetPropertyItem(0x0004).ReadRationals(); double longitude = DMSToDecimal(longitudeDMS); if (longitudeRef == "W") longitude *= -1; byte altitudeRef = image.GetPropertyItem(0x0005).Value[0]; double altitude = image.GetPropertyItem(0x0006).ReadRational(); if (altitudeRef == 1) altitude *= -1; return new GpsPosition(latitude, longitude, altitude); } } public class GpsPosition { private readonly double _latitude; private readonly double _longitude; private readonly double _altitude; public GpsPosition(double latitude, double longitude, double altitude) { _latitude = latitude; _longitude = longitude; _altitude = altitude; } public double Latitude { get { return _latitude; } } public double Longitude { get { return _longitude; } } public double Altitude { get { return _altitude; } } }
Tu peux l'utiliser comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part var position = image.GetGPSPosition();
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
TomLev
c'est exactement ce que je cherchais! Merci pour tout et ça marche!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager