Forums Développement Multimédia

Aller au contenu

Optimisation qualité bitmap en réduction

bitmap smoothing scale quality CODE Actionscript

5 réponses à ce sujet

#1 BBFUNK01

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 165 messages

Posté 01 July 2013 - 16:26 PM

Hello,

Mon message est un peu tel une bouteille lancée à la mer mais sait-on jamais :

J'ai besoin dans Flash de générer des fichiers .pdf contenant des images qui peuvent être soit réduites soit agrandies (ou tout simplement laissées à échelle 1).
Ma question concerne donc la qualité des images lorsqu'elles sont réduites :
Si par exemple j'uploade une image dont les dimensions sont 1400 x 800 px, et si je réduis celle-ci à échelle 1/2 (soit 700 x 400 px), en sortie dans mon fichier .pdf généré la qualité est déplorable et j'ai de magnifiques escaliers.
D'après ce que j'ai vu une réduction de plus de moitié, dans Flash, ne donnera que des résultats catastrophiques. D'ailleurs une réduction du même acabit dans Photoshop donnera le même résultat d'après mes tests.
En somme est-ce qu'il existe une manière dans Flash de réduire des images et d'éradiquer au maximum la pixellisation de celles-ci ? (Je précise que je lisse les images après leurs chargements).

J'ai vu qu'il était possible, en se basant sur des algorithmes spécifiques, de calculer la répartition des pixels lors d'une réduction mais que cela avait pour effet de détériorer les couleurs.
Est-ce que quelqu'un a déjà expérimenté cela et serait à même de me dire si ça vaut le coup que je planche là-dessus ?

Merci.

BBFUNK01

#2 BBFUNK01

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 165 messages

Posté 01 July 2013 - 16:29 PM

J'oubliais :

Dans Illustrator lorsqu'on importe une image et qu'on la réduit de 50%, les contours restent nets et la pixellisation est quasi inexistante.
Je sais que c'est du à la prévisualisation dans Illustrator mais d'une façon ou d'une autre, s'il est possible dans un logiciel d'avoir un résultat satisfaisant à l'écran il doit être possible d'avoir un résultat cohérent à l'enregistrement, non ? (après enregistrement en .pdf malheureusement le résultat est aussi pourri qu'après la génération du fichier .pdf dans Flash, seule la prévisualisation dans Illustrator est clean).

Merci.

BBFUNK01

#3 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3485 messages

Posté 01 July 2013 - 17:03 PM

Hello !

Apriori le mieux que tu puisse faire serait


var bd:BitmpaData = new BitmapData(photo.width,photo.height,false,0);
var scale:Number = 0.4;
var matrix:Matrix = new Matrix();
matrix.scale(scale,scale);
bd.draw(photo,matrix,null,null,null,true);

var image:Bitmap = new Bitmap(bd);
image.x = image.y = 100;
 

il est important que la position x et y soit un entier - ceci dit, si tu veux ajouter du flou, tu peux au contraire essayer de ne pas utiliser de chiffre entier pour le positionnement -

#4 BBFUNK01

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 165 messages

Posté 01 July 2013 - 17:34 PM

Hello tlecoz,

Merci pour ta réponse rapide ;-).

Le fait est que les coordonnées de mes bitmaps sont bien des entiers, ceci dit ils peuvent subir des rotations et fait exprès la rotation dans Flash n'est pas copine avec le lissage.

J'avais essayé pour solutionner le problème de tester en gérant la réduction soit en jouant sur les paramètres width et height de mes bitmaps, soit sur le paramètre scale : dans les deux cas les résultats ne sont pas mirobolants.

La principale contrainte est que les images uploadées peuvent déjà à la base être d'une qualité "à peine correcte" et donc pas forcément optimisée pour réduction ou agrandissement.

En ce moment-même je gratte du coté des algorithmes de lissage de ce type : http://www.hiend3d.com/hq3x.html mais je ne suis pas certain que ça puisse s'appliquer sur des images de type photo de paysage par exemple, et encore moins certain que ça puisse être efficace en s'appliquant lors d'une réduction.

En gros j'essaie de "limiter la casse" sur la génération des .pdf mais je suis très sceptique quant à l'issue de la chose :(.

Merci ;-).

BBFUNK01

#5 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3485 messages

Posté 01 July 2013 - 19:01 PM

Citation

Le fait est que les coordonnées de mes bitmaps sont bien des entiers, ceci dit ils peuvent subir des rotations et fait exprès la rotation dans Flash n'est pas copine avec le lissage.

Dans ce cas, travaille directement sur la matrix de transformation de ton image (pas celle du bitmapData, celle du bitmap) et arrondis manuellement la position x et y (après un calcul tel q'une rotation, flash recalcul les positions et des valeurs en entier peuvent devenir des float, d'ou la nécessité du forcing manuel)

#6 thenaoh

    Ceinture Orange

  • Members
  • PipPipPip
  • 47 messages

Posté 08 July 2013 - 15:49 PM

Je ne sais pas si ça peut aider, mais personnellement, je crée un bitmap à partir de la photo d'origine comme suit :


var bitmapData:BitmapData = new BitmapData(photo.width, photo.height, false);
bitmapData.draw(photo);
var bitmapFinal:Bitmap = new Bitmap(bitmapData, "auto", true);
 

Ca me donne toujours de bons résultats, et je peux ainsi placer bitmapFinal aux coordonnées que je veux, le redimensionner et le pivoter à volonté.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP