2011-10-13 5 views
1

Je dois prendre quelques images de la bibliothèque de photos iPhone/iPad depuis mon application et les stocker dans une entité Core Data, et les afficher sous forme de petites images miniatures (48x48 pixels) dans un UITableViewCell, et environ 80x80 pixels dans un détail UIView. J'ai suivi l'exemple d'application Recettes, où ils utilisent UIImageJPEGRepresentation(value, 0.1) pour convertir en NSData et stocker les octets dans les données de base, et cela ne prend pas beaucoup de place, ce qui est bien. Mais lors de la récupération des données, en utilisant UIImage *uiImage = [[UIImage alloc] initWithData:value]; et l'afficher comme une image miniature avec "Aspect Fit", il semble terrible et granuleuse. J'ai essayé de changer la variable de qualité d'image dans la compression JPEG, mais même le mettre à 0,9 n'aide pas.iOS: stocker des images miniatures dans les données de base

Est-ce normal? Y a-t-il une meilleure façon de compresser l'image qui ne cause pas tant de grainee-ness? Puisque je veux juste montrer une petite vignette, puis une miniature un peu plus grande, je pense que Core Data serait parfait pour stocker cela, car il devrait (en théorie) également prendre en charge iCloud. Mais si ça a l'air terrible, alors je vais devoir reconsidérer.

Répondre

1

Deux choses, redimensionnez-vous l'image à la bonne taille? Avez-vous essayé UIImagePNGRepresentation()? Cela devrait le compresser sans perte de qualité.

+0

Merci. J'ai essayé les deux, mais les images ont l'air terribles en toutes circonstances. Cela fonctionne bien sur un iPhone, mais sur un iPad, choisir une image de la bibliothèque est énorme, et peut-être faire un Aspect Fit dans une miniature 48x48 ne semble pas bon. Que recommanderiez-vous comme un algorithme de redimensionnement UIImage? Peut-être que le problème est avec ça. J'utilise ceci: http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/ –

0

Si UIImagePNGRepresentation (qui est sans perte) vous donne des images incorrectes, le problème se situe dans le code de redimensionnement de l'image. Les données de base vous donnent simplement ce que vous sauvegardez, donc si vous obtenez de mauvaises images, c'est parce que vous avez mis de mauvaises images.

Est-ce que l'un de vos iPhone/iPad rétine et l'autre ne l'est pas? Si oui, le problème est peut-être que vous ne voulez pas vraiment d'images 48x48 pixels, vous voulez 48x48 points (ce qui signifie que vous aurez besoin de 2x images 96x96 pour l'affichage de la qualité de la rétine).

Questions connexes