8
votes

Format d'image WebP sur iOS

Je recherche actuellement la possibilité d'utiliser le format d'image Web de Google dans notre logiciel iOS.

J'ai trouvé que ce n'est pas difficile de décoder la pageP dans RGBA8888 au besoin, à l'aide de la bibliothèque COBO »de Google.

Cependant, je voudrais créer une mise en œuvre comparable à l'uImage en termes d'API et de performances.

Q1. Est-il possible dans IOS de développer un décodeur d'image afin que l'image nativeWithData et d'autres API lisent le nouveau format?

Q2. Si non, l'API UIImageView (et d'autres contrôles fournis par le cadre) utilisez-vous pour attirer l'uImage? Est-ce public (par exemple, Drawnrect / DrawatPoint) ou interne?

Puis-je hériter d'uiimage, remplacer quelques méthodes (telles que l'imageWithContentsOffile + ImageWithData, + Imagenamed, -Drawinrect, -DrawatPoint) et mes objets Wpimage se comportent bien avec les API fournies par SDK?

Q3. Si chaque instance de ma classe hypothétique Wpimage sera abonnée à UIAPplicationDidrecefeivemoryWarningNotification (pour affleurer la mémoire tampon d'image RGBA laissant les données Web d'origine beaucoup plus petites dans la RAM), ne blessera pas beaucoup les performances?

Le logiciel que nous développons peut facilement avoir des centaines d'images différentes en RAM.


0 commentaires

6 Réponses :


1
votes

1 commentaires

Avez-vous lu la question, en particulier "il n'est pas difficile de décoder la pageP dans le RGBA8888, selon les besoins en utilisant la bibliothèque de Google"? Bien sûr, il est trivial de décoder. Ma question concerne l'intégration du décodeur WebP dans l'Uikit, pas sur le décodage lui-même.



0
votes

Un autre exemple que j'ai écrit utilise le travail que Carson McDonald a commencé mais de manière réutilisable. Fondamentalement, vous ajoutez la pageP.Framework à votre projet (inclus dans mon exemple ou crée-capable d'utiliser les instructions Carson a sur son site Web), puis vous pouvez faire quelque chose comme ceci:

#import "UIImage+WebP.h"
...

self.imageView.image = [UIImage imageFromWebP:@"path/to/image.webp"];
// or
[self.button setImage:[UIImage imageFromWebP:@"path/to/image.webp" 
        forState:UIControlStateNormal]];


1 commentaires

Et si la pageP est locale?



0
votes

Tout d'abord, décodez les pixels WebP dans un tampon. Vous devez ensuite appeler cgdataProviderCreatewithData () pour créer un "fournisseur de données" pour Coregraphics, puis appeler cgimagecree () et transmettre le fournisseur et tous les arguments nécessaires. Enfin, invoquer l'imageImage ImageWithCgimage: Imageref afin de créer une instance UIImage.


0 commentaires

3
votes

J'ai fait complet (décodage / encodage) uiimage wrapper pour WebP .

https://github.com/shmidt/webp-uiImage


5 commentaires

J'ai essayé de la mettre en œuvre pour obtenir la page de site d'un uiimage, et il se bloque sur un iPhone 4S en cours d'exécution iOS 7: le processeur devient supérieur à 90% et reste là-bas. Je suis lié à une bibliothèque de Reconstruction WebP avec le même résultat. Il se bloque pendant l'appel à Webpencodergba. Avez-vous été capable d'encoder avec succès une pages Web d'un uiimage?


@pickwick Je n'ai pas essayé sur l'appareil, mais vous pouvez essayer une version avec cadre mis à jour: Github.com / Seanooi / iOS-WebP


J'ai mis à jour le cadre. Les problèmes s'avèrent être ma patience: c'est juste trop lent et le processeur intensive pour encoder de grandes images. Si je redimensionniste l'image à quelque chose comme 1200 x 1200, je peux obtenir les données après environ 10 secondes. La taille du fichier est plus petite qu'un JPEG, mais le temps de traitement est trop long pour que cela soit utile dans mon application. Merci


Il faut 18 secondes pour coder une image 4K sur 6s. La plupart de cette période est passée dans le Webpencodergba de Google


Une façon de partir est de vérifier si vous pouvez dépenser de Google Framework et voir si vous pouvez utiliser le GPU pour le codage. Mais ce n'est évidemment pas un effort d'un doublure ;-)



0
votes

sdwebimage est une bibliothèque qui fournit un téléchargeur d'image ASYNC qui peut être facilement étendu à la prise en charge de la page de service via SDWebImageWebPCoder .


0 commentaires

1
votes

Prise en charge de l'image en ligne qui arrive à iOS 14

Mettez à jour vos appareils.


1 commentaires

Finalement! 2 ans plus tard que sur Android