Bonsoir,
Je suis toujours sur mon application de cave à vin, basée sur l’utilisation de Core Data + CloudKit.
À chaque bouteille est associée une étiquette.
Je gère une vignette « thumbnail » de taille réduite (60 x 90) et une image de meilleure résolution que je transforme en image 600 x 900 avant de la stocker dans Core Data et iCloud. Lorsque l’utilisateur clique sur la vignette, l’image en résolution 600 x 900 s’affiche sur l’iPhone ou l’iPad.
Ces deux images sont stockées sous forme de Binary Data dans un objet Core Data « Etiquette ».
Pour 220 bouteilles (et donc 220 étiquettes), la taille des données sur mon iPhone fait 455 Mo (+ 1 Mo pour l’app elle-même).
Question: puis-je réduire fortement la taille de mon app sans réduire la qualité de ce que j’affiche à l’utilisateur quand il clique sur la vignette de l’étiquette ?
Pour information, le code utilisé pour traiter l’image sélectionnée par l’utilisateur:
if let imageData = image.pngData() {
if let fullSizeImage = resizedImage(with: imageData, for: CGSize(width: 600, height: 900)), let thumbnailUIImage = resizedImage(with: imageData, for: CGSize(width: 60, height: 90)) {
let etiquette = Etiquette(context: context)
etiquette.imageFullSize = fullSizeImage.pngData()
etiquette.thumbnail = thumbnailUIImage.pngData()
etiquette.bouteille = newItem
}
}
func resizedImage(with data: Data, for size: CGSize) -> UIImage? {
let options: [CFString: Any] = [
kCGImageSourceCreateThumbnailFromImageIfAbsent: true,
kCGImageSourceCreateThumbnailWithTransform: true,
kCGImageSourceShouldCacheImmediately: true,
kCGImageSourceThumbnailMaxPixelSize: max(size.width, size.height)
]
guard let imageSource = CGImageSourceCreateWithData(data as CFData, nil),
let image = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, options as CFDictionary)
else {
return nil
}
return UIImage(cgImage: image)
}
Cordialement,
Nicolas