Google Photos EXIF Editor
Genel Bakış
Google Photos EXIF Editor, Google Photos’tan indirilen fotoğraf ve videoların meta verilerini (özellikle tarih bilgilerini) düzeltmek için geliştirilmiş bir Python uygulamasıdır. Program, Google Photos’un dışarı aktarma işlemi sırasında orijinal çekim tarihlerinin kaybolması sorununu çözerek, bu tarihleri fotoğrafların EXIF verilerine ve dosya sistemine tekrar ekler.
Teknik Mimari
Uygulama, modern bir yazılım mimarisiyle üç ana bölümden oluşur:
- Çekirdek Motor (core): Dosya işleme mantığı
- Grafiksel Arayüz (gui): Kullanıcı arayüzü
- Ana Modül (main.py): Başlatıcı modül
Çalışma Mantığı
1. Tarih Çıkarma Stratejisi
Program, tarih bilgilerini elde etmek için üç farklı kaynak kullanır:
- JSON Meta Dosyaları: Google Photos’un dışa aktarma işleminde oluşturulan
.supplemental-meta.json
dosyalarından çekim tarihi bilgilerini çıkarır. - Dosya Adı Analizi: Çeşitli bilinen dosya adı formatlarını analiz ederek tarih bilgilerini tespit eder:
2023.05.15 12.34.56.jpg
formatı20230515_123456.jpg
formatı2023-05-15-12-34-56.jpg
formatıIMG_20230515_
veyaVID_20230515_
formatı- Diğer çeşitli formatlar
2. EXIF ve Dosya Tarihi Güncelleme
Tarih bilgisi bulunduktan sonra:
JPEG Dosyaları: EXIF verileri
piexif
kütüphanesi kullanılarak güncellenir. Üç farklı EXIF tarih alanı güncellenir:- DateTimeOriginal (Orijinal çekim tarihi)
- DateTimeDigitized (Sayısallaştırma tarihi)
- DateTime (Ana dosya tarihi)
Tüm Dosya Türleri: Dosya sistemindeki oluşturma ve değiştirme tarihleri güncellenir.
3. Kapsanan Dosya Formatları
Program şu dosya türlerini destekler:
- Fotoğraflar:
.jpg
,.jpeg
,.png
,.heic
,.webp
- Videolar:
.mp4
,.mov
Mimari Detayları
Çekirdek Motor (exif_processor.py
)
Bu modül, uygulamanın ana işlevselliğini sağlar:
- Tarih çıkarma algoritmaları
- EXIF veri manipülasyonu
- Dosya sistemi tarihi yönetimi
- Çoklu dosya işleme
Çekirdek işlevler:
get_timestamp_from_json()
: JSON dosyalarından tarih bilgisi çıkarırget_timestamp_from_filename()
: Dosya adından tarih bilgisi çıkarırupdate_exif_date()
: JPEG dosyalarının EXIF verilerini güncellerupdate_file_system_date()
: Dosya sistemindeki tarihleri güncellerprocess_file()
: Tek dosyayı işlerscan_and_process()
: Bir klasörü tarayıp tüm uygun dosyaları işler
Grafiksel Arayüz (app.py
)
Modern bir arayüz sağlayarak kullanıcı etkileşimini kolaylaştırır:
- Klasör seçimi
- İlerleme göstergeleri
- Detaylı log bilgileri
- İşlem durdurma fonksiyonu
Arayüz, PyQt5 kütüphanesi kullanılarak geliştirilmiştir ve şık bir “Nordic” tema ile görsel çekiciliğe sahiptir.
Çoklu İş Parçacığı Desteği
ProcessingWorker
sınıfı, Qt’nin QThread
sınıfını kullanarak asenkron işleme sağlar. Böylece:
- Kullanıcı arayüzü donmaz
- Büyük klasörlerin işlenmesi arka planda gerçekleşir
- İşlem anında ilerleme güncellemeleri yapılır
Nordic Tema (nordic_theme.py
)
“Nord” renk paletine dayalı hoş görünümlü bir arayüz sağlar:
- Koyu mavi/gri arka plan
- Parlak metin renkleri
- Mavi ve yeşil vurgular
- Yuvarlak köşe tasarımı
Hata Yönetimi
Uygulama, hata toleranslı bir yapıya sahiptir:
- Başlatma hataları için kapsamlı bir try-catch sistemi
- Başarılı/başarısız dosya sayısı takibi
- Detaylı hata raporlaması
Pakatleme ve Dağıtım
Uygulama, PyInstaller kullanılarak tek bir çalıştırılabilir dosya olarak paketlenebilir, böylece kullanıcıların Python ortamı kurmasına gerek kalmaz. PyInstaller komutu:
python -m pyinstaller --noconfirm --onefile --windowed --add-data "src/assets;src/assets" src/main.py
Sonuç
Google Photos EXIF Editor, Google Photos’tan indirilen fotoğraf ve videolardaki tarih bilgilerini kurtarıp düzelten, kullanımı kolay ve modern bir araçtır. PyQt5 ile geliştirilen şık arayüzü, çoklu iş parçacığı desteği ve kapsamlı hata yönetimiyle hem işlevsel hem de kullanıcı dostudur.
Uygulamanın güçlü yanları:
- Çoklu dosya formatı desteği
- Akıllı tarih çıkarma algoritmaları
- Modern ve duyarlı arayüz
- Çoklu iş parçacığı performansı
- Detaylı ilerleme ve log bilgileri
Bu araç, özellikle büyük Google Photos arşivlerini indiren ve orijinal çekim tarihlerini korumak isteyen fotoğraf tutkunları için büyük değer taşımaktadır.