STABLE: Final schema sync, optimized gitignore
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
# /opt/docker/dev/service_finder/backend/app/services/media_service.py
|
||||
from PIL import Image
|
||||
from PIL.ExifTags import TAGS, GPSTAGS
|
||||
import logging
|
||||
@@ -6,48 +7,39 @@ from typing import Tuple, Optional
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class MediaService:
|
||||
@staticmethod
|
||||
def _get_if_exist(data, key):
|
||||
if key in data:
|
||||
return data[key]
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def _convert_to_degrees(value) -> float:
|
||||
"""EXIF koordináták (fok, perc, másodperc) konvertálása tizedes fokká."""
|
||||
d = float(value[0])
|
||||
m = float(value[1])
|
||||
s = float(value[2])
|
||||
return d + (m / 60.0) + (s / 3600.0)
|
||||
""" EXIF racionális koordináták konvertálása tizedes fokká. """
|
||||
try:
|
||||
d = float(value[0])
|
||||
m = float(value[1])
|
||||
s = float(value[2])
|
||||
return d + (m / 60.0) + (s / 3600.0)
|
||||
except (IndexError, ZeroDivisionError, TypeError):
|
||||
return 0.0
|
||||
|
||||
@classmethod
|
||||
def extract_gps_info(cls, file_path: str) -> Optional[Tuple[float, float]]:
|
||||
"""Kiolvassa a GPS koordinátákat a képből."""
|
||||
""" GPS koordináták kinyerése a kép metaadataiból (Robot Hunt alapja). """
|
||||
try:
|
||||
image = Image.open(file_path)
|
||||
exif_data = image._getexif()
|
||||
if not exif_data:
|
||||
return None
|
||||
with Image.open(file_path) as image:
|
||||
exif = image._getexif()
|
||||
if not exif: return None
|
||||
|
||||
gps_info = {}
|
||||
for tag, value in exif_data.items():
|
||||
decoded = TAGS.get(tag, tag)
|
||||
if decoded == "GPSInfo":
|
||||
for t in value:
|
||||
sub_decoded = GPSTAGS.get(t, t)
|
||||
gps_info[sub_decoded] = value[t]
|
||||
gps_info = {}
|
||||
for tag, value in exif.items():
|
||||
if TAGS.get(tag) == "GPSInfo":
|
||||
for t in value:
|
||||
gps_info[GPSTAGS.get(t, t)] = value[t]
|
||||
|
||||
if gps_info:
|
||||
lat = cls._convert_to_degrees(gps_info['GPSLatitude'])
|
||||
if gps_info['GPSLatitudeRef'] != "N":
|
||||
lat = 0 - lat
|
||||
if 'GPSLatitude' in gps_info and 'GPSLongitude' in gps_info:
|
||||
lat = cls._convert_to_degrees(gps_info['GPSLatitude'])
|
||||
if gps_info.get('GPSLatitudeRef') != "N": lat = -lat
|
||||
|
||||
lon = cls._convert_to_degrees(gps_info['GPSLongitude'])
|
||||
if gps_info.get('GPSLongitudeRef') != "E": lon = -lon
|
||||
|
||||
lon = cls._convert_to_degrees(gps_info['GPSLongitude'])
|
||||
if gps_info['GPSLongitudeRef'] != "E":
|
||||
lon = 0 - lon
|
||||
|
||||
return lat, lon
|
||||
return lat, lon
|
||||
except Exception as e:
|
||||
logger.warning(f"Nem sikerült kiolvasni az EXIF adatokat: {e}")
|
||||
return None
|
||||
logger.warning(f"EXIF kiolvasási hiba ({file_path}): {e}")
|
||||
return None
|
||||
Reference in New Issue
Block a user