Stocker beaucoup d'images dans une application

sebbisebbi Membre
07:00 modifié dans API UIKit #1
Bonjour à  tous,

Je souhaiterai que mon application ne dépasse pas les 20mo mais mon problème est que mon application dispose de plus de 200 images de 200ko chacune donc dépasse largement.

Comment puis je compresser ses images afin quelles ne fassent que quelques ko?

Je sais que cela est possible car je connais une application qui le fait.
Je sais qu'elle utilise des nsdata pour stocker ses images mais des nsdata de très petites tailles alors que l'image a une grande résolution.

En espérant avoir était clair, sinon n'hésitez pas à  demander :).

Réponses

  • DrakenDraken Membre
    07:00 modifié #2
    Oui, c'est possible. On peut même réduire une image à  quelques dizaines d'octets. Tout dépend de sa complexité. Impossible de t'aider sans regarder tes images.

    Si tes images sont au format .png essaye de les convertir en .jpg.
    Si c'est nécessairement des .png, essaye de retirer la couche alpha.

    Il est possible que l'application dont tu parles emploie un format d'image vectoriel, ce qui permet de créer des graphismes avec une occupation mémoire ridicule, et pas mal de contraintes techniques.

    Montre-nous des exemples de tes images !

  • zoczoc Membre
    07:00 modifié #3
    Concrètement, si les images sont déjà  au format JPG, alors augmenter la compression fera obligatoirement baisser leur qualité.


    Et NSData n'a franchement pas grand chose à  voir, NSData n'est qu'un conteneur pour une suite d'octets. Après, ce que cette suite d'octets signifie... C'est à  l'entière liberté du développeur...

  • sebbisebbi Membre
    07:00 modifié #4
    Oui bien sur, je ne veux pas baisser la qualité des images en les compressant plus en jpg.

    Voici un exemple d'une image à  stocker :
    http://flagpedia.net/data/flags/ultra/pt.png

    Ici l'image est en png mais je la convertit en jpg, mais maintenant même en jpg la taille reste importante si j'ai 200 photos à  stocker.
  • zoczoc Membre
    07:00 modifié #5
    Bah alors c'est simple, il n'y a pas de solution. Ce que tu essayes de faire, c'est faire entrer 1 litre d'eau dans une bouteille de 20 cl...


    Donc clairement, à  part la perte de qualité (compression plus importante) ou la baisse de résolution... Parce qu'en pratique, la vectorisation dont parle Draken, ce n'est pas exploitable sur des images complexes.


    Accessoirement, c'est quoi l'intérêt d'avoir des drapeaux de 2560x1707 sur un iphone ou un ipad, qui ont tous les 2 une résolution bien inférieure ?

  • sebbisebbi Membre
    07:00 modifié #6
    Pourtant je suis sur que cela est possible, j'ai une application qui le fait.

    Le but est de voir tous les détails du drapeau, bien sur certains ont plus d'intérêts que d'autres.
  • zoczoc Membre
    07:00 modifié #7
    dans 1324055748:

    j'ai une application qui le fait.

    Oui, moi aussi je marche sur l'eau, si si...


    Quelle application ?

  • sebbisebbi Membre
    07:00 modifié #8
    Lol  :)

    C'est "Flag Atlas".
  • zoczoc Membre
    décembre 2011 modifié #9
    Bon alors pour flag atlas c'est simple (mais vraiment astucieux, je n'y aurais jamais pensé):
    • Les drapeaux complexes (comme celui de Belize par exemple), sont stockés sous forme de fichiers JPG dans plusieurs résolutions, certains fichiers faisant alors plus de 600 ko (si si)
    • Les drapeaux simples ne sont en fait pas des images, mais des pages html (bah oui, pas très compliqué de faire le drapeau français en HTML 5/CSS 3, 3 divs avec 3 couleurs de fonds) compressées en gz, donc évidemment, des fichiers minuscules.
    Etant donné que la majorité des drapeaux sont simples, le résultat c'est une application qui ne pèse pas lourd. Donc conclusion si tu veux faire pareil, il va falloir redessiner la plupart des drapeaux en utilisant HTML5/CSS3.

  • DrakenDraken Membre
    07:00 modifié #10
    Je vois, c'est des blasons de ville/régions/provinces. Ce sont des images très simples passant très bien en vectoriel. A mon avis, les développeurs de "Flag Atlas" ont demandés à  un graphiste de refaire les blasons avec un logiciel d'image vectoriel, le convertissant en une série de points et de courbes. Je ne sais pas s'il existe de bons logiciels de conversion bitmap => vectoriel. Mais le codage est faisable à  la main.

  • DrakenDraken Membre
    07:00 modifié #11
    Ah oui, pas bête la technique ! En reprenant la même idée, tu peux gagner énormément de place en créant un mini-format vectoriel pour les drapeaux simples. Comme le dis zoc, la France c'est juste 3 rectangles de couleurs à  dessiner. Cela se code en quelques octets !

    Le Canada juste un fond très simple et une image bitmap collée par dessus (la feuille d'étable).

    Tu peux réduire l'occupation mémoire de ton image pt.png en codant à  part le château et en le superposant sur le fond (la même image est utilisée 7 fois dans le blason). Idem pour le bouclier (présent 5 fois sur le blason).


  • sebbisebbi Membre
    07:00 modifié #12
    Merci beaucoup pour toutes ses précisions  :) mais j'ai quelques petites interrogations.

    - Pourquoi par exemple le drapeau du Paraguay lui n'est pas en jpg alors qu'il est détaillé? D'ailleurs même les drapeaux simple ont une très bonne résolution (on le remarque quand on zoom) alors qu'ils sont en html est ce normal?

    - Dans son application il y a un fichier data.plist dans lequel il répertorie toutes les informations sur le pays, ma question est à  quoi correspond la clé "flagbin" qui est de type NSData?

    - Le fichier par exemple "Croatia.html.bz" ne corresponderait-il pas aux informations wikipédia du pays?

    En tous cas merci à  vous deux pour votre aide er désolé pour toutes ses questions, ça m'intrigue beaucoup de comprendre.
  • DrakenDraken Membre
    décembre 2011 modifié #13
    Le drapeau de la Croatie sur Wikipédia est au format SVG, un format vectoriel.

    Quelques infos sur le drapeau de Wiki :
    http://fr.wikipedia.org/wiki/Fichier:Flag_of_Croatia.svg


    Quelques infos sur le format SVG :
    http://fr.wikipedia.org/wiki/Scalable_Vector_Graphics
  • Bonjour, 


     


    Je me pose exactement cette même question, en effet, pour une application qui affiche des articles avec plusieurs photos, et ceux disponible en off-Line, comment pourrais-t-on procéder pour stocker en local les photos sans que l'application pèse une tonne.


     


    Le dernier post date de 2011 donc je me dit qu'il y a peut être des libs qui ont été dev par des croqueurs de pomme fou !!!


    - SDWebImage


    - FastImageCache


     


    Mon idée aurai été de mettre tout ça en cache à  la première/chaque connexion et quand l'application est en off-line, ce servir du cache pour afficher les image mais je sais pas si cela répondrai à  la problématique.


Connectez-vous ou Inscrivez-vous pour répondre.