Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.

ALAssetsLibrary Resim Ekleme

0 oy
32 kez görüntülendi
20, Şubat, 2018 ios development kategorisinde burhanaksendir tarafından soruldu

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
20, Şubat, 2018 yasin tarafından cevaplandı

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

20, Şubat, 2018 yasin tarafından yorumlandı

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.

20, Şubat, 2018 burhanaksendir tarafından yorumlandı

Ü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.

20, Şubat, 2018 yasin tarafından yorumlandı

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.

20, Şubat, 2018 burhanaksendir tarafından yorumlandı
20, Şubat, 2018 burhanaksendir tarafından düzenlendi

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

+1 oy
21, Şubat, 2018 burhanaksendir tarafından cevaplandı
 
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.

...