Ceci est également mon propre mémo. Vous pouvez le faire facilement avec python. En guise de mise en garde
Il existe plusieurs bibliothèques associées. Il vaut mieux l'unifier à l'un d'eux, mais c'est un mémo qui a fonctionné pour le moment. (Hey)
J'ai trouvé les documents suivants.
Selon cela, GPS Info IFD semble être défini comme suit.
Il y en a beaucoup, mais les fichiers que j'ai traités n'étaient que des balises 0-6. J'étais capable de lire et d'écrire la latitude, la longitude et la hauteur du GPS, donc c'était suffisant pour le moment. Ici, le GPS LatitudeRef utilise une seule lettre «N» ou «S» pour indiquer la latitude nord et la latitude sud. La latitude GPS est exprimée en minutes.
J'ai utilisé [Pillow](9 https://pypi.org/project/Pillow/). Je ne me souviens pas si j'ai eu du mal à me préparer.
pip3 install pillow
Je pourrais lire la latitude et la longitude ci-dessous.
read_gpsexif.py
from PIL import Image
infile = "test.JPG"
img = Image.open( infile )
exif = img._getexif()
for k, v in exif.items():
if k==34853:
print(v)
avec ça
{0: b'\x02\x00\x00\x00',
1: 'N',
2: (35.0, 20.0, 53.51123),
3: 'E',
4: (137.0, 9.0, 17.83123),
5: b'\x00', 6: 256.123}
Vous obtiendrez des résultats comme Vous pouvez voir la signification en la comparant à la définition de GPS INfo IFD dans la spécification précédente. Puisqu'il s'agit de degrés, minutes et secondes, une conversion est nécessaire pour le convertir en notation décimale. Par exemple
deg,minu,sec = 35.0, 20.0, 53.51366
deg + minu/60.0 + sec/3600.0
Pour obtenir `` 35.34819823888889 ''.
J'ai utilisé piexif. C'est une stratégie pour lire et réécrire Gps exif avec conversion en degrés, minutes, secondes et minutes en fonction.
def _to_deg(value, loc):
if value < 0:
loc_value = loc[0]
elif value > 0:
loc_value = loc[1]
else:
loc_value = ""
abs_value = abs(value)
deg = int(abs_value)
t1 = (abs_value-deg)*60
minu = int(t1)
sec = round((t1 - minu)* 60, 5)
return (deg, min, sec, loc_value)
import Fraction
def _change_to_rational(number):
f = Fraction(str(number))
return (f.numerator, f.denominator)
Pour faire ce qui suit:
write_gpsexif.py
import piexif
lat, lng, altitude = 39.123, 139.123, 50.123
jpg_filepath = "test.JPG"
lat_deg = to_deg(lat, ["S", "N"])
lng_deg = to_deg(lng, ["W", "E"])
exif_lat = (change_to_rational(lat_deg[0]), change_to_rational(lat_deg[1]), change_to_rational(lat_deg[2]))
exif_lng = (change_to_rational(lng_deg[0]), change_to_rational(lng_deg[1]), change_to_rational(lng_deg[2]))
gps_ifd = {
piexif.GPSIFD.GPSVersionID: (2, 0, 0, 0),
piexif.GPSIFD.GPSAltitudeRef: 0,
piexif.GPSIFD.GPSAltitude: change_to_rational(round(altitude, 3)),
piexif.GPSIFD.GPSLatitudeRef: lat_deg[3],
piexif.GPSIFD.GPSLatitude: exif_lat,
piexif.GPSIFD.GPSLongitudeRef: lng_deg[3],
piexif.GPSIFD.GPSLongitude: exif_lng,
}
gps_exif = {"GPS": gps_ifd}
exif_data = piexif.load(jpg_filepath)
exif_data.update(gps_exif)
exif_bytes = piexif.dump(exif_data)
piexif.insert(exif_bytes, file_name)
Je pense que cela était basé sur StackOverflow, mais j'ai perdu le lien. Si vous le trouvez, ajoutez-le.
Ceci est un mémo lorsque je lis et écris GPSExif sur la photo au besoin.
C'était un article disant que c'était un mémo de travail d'Eiya, alors j'aimerais l'élargir. Cela a été compliqué ces derniers temps. .. ^^; (08/08/2020)
Recommended Posts