Bitmap Native Encoding

16 oct

Pouvoir encoder des images est quelque chose de très utile lorsqu’on développe des applications orientées DAO et retouche d’image. Sur MyDesign par exemple il en est beaucoup question.
Cette application en flash, permet de personnaliser tout type de support ( mug, tableau, t-shirt, etc…), en y ajoutant des images et en les transformant avec différents outils de déformation et d’effet.

Depuis la version 11.3 du flash player et 3.3 de AIR, l’API met à notre disposition une nouvelle méthode sur les BitmapData, data.encode(); or l’encodage en JPEG et PNG existe depuis plus de 6 ans ( flash player 9 ) via mx.grahics.codec.PNGEncoder.

Ce qui change, outre le support du JPEG XR, c’est que cette méthode est native. C’est très important car une des grosses difficultés rencontrées avec l’encodage, c’est la consommation CPU.

En effet, si techniquement l’algorithme d’encodage n’est pas très compliqué à implémenter, il est gourmand en puissance de calcul, surtout celui du PNG.
Sur des machines modernes et dans des logiciels comme Photoshop, ce facteur est complètement négligeable car ils sont généralement compilés en natif.

Dans notre cas, l’implémentation du PNGEncoder est faite en AS3. Cela veut dire qu’elle est transformée en bytecode par le compilateur et interprétée par l’AVM, la machine virtuelle du flash player.
Voici maintenant un tableau comparatif des deux implémentations pour une image de 2227×2112 :

En mode « fast », l’implémentation native est presque 8 fois plus rapide que l’ancienne. C’est d’autant plus intéressant que ce temps est passé côté client, dans le navigateur.
Si côté serveur cela ne nous pose pas de problème, vous imaginez que bloquer la CPU du client pendant 30 secondes est … embarrassant.
Vous aurez surement noté une  différence importante entre le temps passé par l’encodeur en natif et son mode « fast ». Le mode « normale » utilise un algorithme de compression PNG plus sévère, qui va générer un fichier moins volumineux.

Voici un comparatif des tailles de fichiers :

L’arrivée d’un encodeur natif est une très bonne chose. Les applications du type MyDesign se multipliant, cela fait lever un point de blocage important.
Avec en plus le support du multithreading, et l’accélération matérielle via le GPU, les limites à la création numérique reculent encore…

No comments yet

Leave a Reply

*