Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.
0 oy
710 kez görüntülendi
ios development kategorisinde tarafından

Yasin üstadım merhaba,
iOS uygulamasında bir resmi cihazdaki Photos bölümünde özel bir klasöre ALAssetsLibrary writeImage ile kaydediyorum.

Ancak resim daha önce kaydedilmişse, tekrar kaydedilmesini engellemek istiyorum. İncelediğim kadarıyla iOS, Photos içine kaydedilen resimlere benzersiz bir isim atıyor:

assets-library://asset/asset.JPG?id=3ARE66E2-1321-4456-8145-GDE856E0D63R&ext=JPG

O yüzden nasıl bir kontrol sağlayacağımı bir türlü çözemedim. Bu konuda, bir örnekle yardımcı olabilir misin?

Teşekkürler.

2 Cevaplar

+1 oy
tarafından

Bire bir aynı dosyaların kontrolü sağlanacaksa, hash doğrulaması bir çözüm olabilir.
Dosyanın galeriye kaydederken ayrıca bir de hash'ini alır bir yerlere kaydedersin.
Yeni bir dosya kaydedileceği zaman, yeni dosyanın hash'ini mevcut dosyaların kaydettiğin hash'leri ile karşılaştırırsın, eğer eşleşme varsa yeni dosyayı kaydetmezsin mesela

tarafından
+1

basit bir aramayla hemen şöyle bir Data extension'u buldum mesela.

extension Data {
    var md5 : String {
        var digest = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH))
        _ =  self.withUnsafeBytes { bytes in
            CC_MD5(bytes, CC_LONG(self.count), &digest)
        }
        var digestHex = ""
        for index in 0..<Int(CC_MD5_DIGEST_LENGTH) {
            digestHex += String(format: "%02x", digest[index])
        }
        return digestHex
    }
}

https://github.com/soffes/CommonCrypto
framework'u gerektiriyor.

imaj dosyasını, formatına göre UIImagePNGRepresentation veya UIImageJPEGRepresentation ile data'ya çevirir, daha sonrada bu extension'ile hash'ini alırsın.

tarafından

Üstadım teşekkür ederim. 5- 10 foto içinde performans iyi ama, fotolar 1000 civarı olursa performans sorunu olabiliyor. Başka bir çözüm de yok gibi ben de epey baktım. Halbuki çok basit bir işlem yapmak istiyorum.

tarafından
+1

Realtime bir kontrol söz konusu olacaksa, performans sorun olabilir, evet.
O nedenle fotoğrafların hash'lerini daha önceden alıp ayrı bir yere yazmak ve oradan karşılaştırmak lazım. Her seferinde çok sayıda fotoğrafın hash'ini almak sıkıntı yaratır.

tarafından
tarafından düzenlendi

Teşekkürler. Deneyeceğim SQLite kullanıp.

+1 oy
tarafından
 
En İyi Cevap

ALAssetsLibrary deprecated olmuş. İyi de olmuş aslında. Çok dandik özellikleri vardı. PHPhotoLibrary kullanmaya başladım. Resim eklerken eğer varsa ekleme olayını çok daha rahat bir şekilde çözdüm. localIdentifier kullandım.

...