2011-07-17 3 views
5

Je travaille sur une application iOS en utilisant PhoneGap. Je me suis heurté à un problème ennuyeux où certaines de mes images ne se chargeaient pas. Pensant que c'était un problème de cache, j'ai joué autour d'échanger des images.Limitations de taille d'image dans un safari mobile?

J'ai finalement découvert que le problème avait à voir avec la hauteur de mon image. Après tout un tas d'essais et d'erreurs, j'ai découvert qu'une image plus grande que 7864px ne se chargera pas dans le simulateur d'iPad ou l'iPad lui-même. Il se chargera bien dans Safari. Ce n'est pas une limite de taille de fichier car ils ne font que 45k et je charge des images de taille 700k ailleurs sans problème.

Quelqu'un a-t-il rencontré ce problème? Je ne trouve aucune restriction documentée sur les dimensions de l'image dans Safari mobile. S'il y a des restrictions, les connaître serait pratique.

+0

Opera Mini montre des images en pleine résolution. –

Répondre

5

Pour les applications natives, Apple indique des images plus grandes que 2048x2048 1024x1024 are to be avoided et doivent être divisées en plus petites. Le problème ici n'est pas la taille du fichier sur le disque, mais la taille en mémoire: l'image doit être décodée et transformée en une représentation "plate". Alors faisons quelques calculs: supposons une image de 5000x5000 pixels, avec un RVB de 8 bits. Cela signifie que chaque pixel occupe 3 octets:

5.000 * 5.000 * 3 = 75.000.000 (environ 71,5 MiB)

Vous voyez votre image apparemment petite remplit vraiment la mémoire très rapide. iOS ne peut maintenant pas jeter des pièces si c'est sous la pression de la mémoire, c'est l'image entière ou rien.

Votre seule solution est de décomposer l'image en plus petites parties. iOS peut alors supprimer des images qui ne sont plus visibles de la mémoire (je doute avec une telle image que toutes les parties soient visibles tout le temps).

+0

Cela semble faire référence au rendu de l'interface utilisateur native. Cela vaut-il aussi pour Mobile Safari (PhoneGap)? Je peux travailler avec cette limitation, mais cela signifie que je dois arrêter d'utiliser Sprites dans mon CSS - ce qui est recommandé ailleurs. Donc je suis encore un peu confus. ;) –

+0

J'ai cité la documentation de l'application native car je n'ai rien trouvé de mieux. Pourtant, le problème est le même, que ce soit avec des applications natives ou Safari: une énorme image occupe une énorme quantité de mémoire, et le système d'exploitation ne peut en purger certaines parties (AFAIK). Mais si vous collez une image énorme avec beaucoup d'images plus petites, il n'y a aucun problème pour purger les images qui ne sont pas visibles pour le moment. Au moins c'est ce que Apple dit est comment nous les développeurs natifs devraient le faire. – DarkDust

+0

c'est pourquoi je ne peux pas charger le panorama de 13 000 pixels de Wikipédia! – Ian

Questions connexes