ImageMagick: convert: couleur de texte = "négatif" ?

ImageMagick: convert: couleur de texte = "négatif" ? - Divers - Programmation

Marsh Posté le 12-07-2009 à 00:22:42    

Salut,

 

Je suis en train de coder une plateforme de blogs.
Parmi les fonctions, je veux convertir les images uploadées puis y ajouter l'adresse de chaque blog.

 

Voila comment je compte m'y prendre :

Code :
  1. convert -verbose -alpha deactivate -antialias -filter Lanczos -resize 720x540 -unsharp 0.7x0.7+0.7+0.03 -quality 70 -intent perceptual -gravity SouthEast -font Verdana.ttf -pointsize 10 -fill rgba\(0,0,0,0.42\) -annotate 0x0+4+2 "http://maplateforme.tld/LeBlogDeFoo/" input output.jpg


Cela fonctionne très bien, sauf si la couleur moyenne de l'angle en bas à droite est plutot sombre.
Dans ce cas, le noir de rgba\(0,0,0,0.42\) ne se verra pas.

 

On pourrait alors envisager la solution de découper le carré concerné, flouter à fond et sonder la couleur pour connaître la couleur moyenne de la zone et choisir entre blanc et noir.

 

Mais :
1) cette solution serait un peu lourde
2) après quelque tests sur cas réels je me rends vite compte que ca ne marche pas car il arrive souvent que cette zone soit faite de blancs ET de noirs.

 

NB: j'ai mis une transparence de 0.42 avec une petite police car je tiens vraiment à ce que ce texte reste TRES discret (car possibilité d'imprimer les photos et les recevoir chez soi... ca risquerait d'énerver les gens)

 


on en arrive à ma grande question :

 

Je me suis souvenu qu'il existait une "couleur" dans les icones qui était en réalité l'inverse de ce qu'il y a en dessous, une sorte de transparence inversée ou "couleur négative".
On a tous vu ca dans des pointeurs de souris bien minables...
Lorsqu'on arrive dans une zone noire, le pointeur devient blanc, sur du bleu il devient orange, etc...

 

Cette "couleur" serait vraiment l'idéal dans mon cas et donc je me demande s'il n'y aurait pas un moyen d'intégrer ca dans convert ?
Dans ce cas, la couleur du texte serait variable: constamment l'inverse de la couleur du pixel qu'il y a en dessous.
ATTENTION: je ne parle bien sur pas de variation lors de l'affichage de l'image, mais lors de l'incrustation du texte dans l'image originale.

 

MERCI beaucoup par avance pour vos idées !


Message édité par MisterBark le 12-07-2009 à 00:25:25

---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

Marsh Posté le 12-07-2009 à 00:22:42   

Reply

Marsh Posté le 12-07-2009 à 08:00:42    

Bon, j'ai trouvé une méthode mais
1) c'est quand meme super lourd
2) bien que ca marche extremement bien, j'ai oublié une chose: le négatif de gris est gris... donc s'il y a trop de couleurs un peu grises dans la zone de texte, ca ne se verra pas.
 
Voila tout cette méthode :
1) redimensionner l'image originale comme d'habitude, sans rien modifier -> temp1.png
2) creer text.png qui aura le texte en rgba\(0,0,0,0.6\) par exemple, et le fond en transparent, le tout avec des nuances de transparence.
3) c'est la qu'arrive le secret: gràce à -compose Dst_Out, faire un "trou" dans temp1.png à l'aide de text.png -> temp2.png
Ce trou est donc transparent mais avec des nuances de transparence pour le lissage du texte.
4) avec -level 100%,0  faire le négatif dfe temp1.png -> temp3.png
5) mélanger temp2.png et temp3.png grace à -composite et encoder ca en out.jpg.
 
Résultat: on a non seulement une transparence négative parfaitement lissée, mais en plus on peut doser la nuance de transparence avec le 0.6 du rgba
 
MAIS,
 
Cette méthode n'étant pas top lorsque les couleurs se rapprochent du gris, je pense que le mieux est de faire un crop sur la zone qu'on veut utiliser pour le texte, et analyser avec identify puis faire la moyenne des Mean et "Standard deviation" avec de décider si on fait un simple noir ou blanc avec un peu de transparence, ou cette méthode de négatif.
Je vais donc coder ca pour que toutes les valeurs (transparence, et couleurs) s'ajustent automatiquement en fonction des résultats du identify.
 
Voila.
Si quelqu'un a une meilleure idée pour qu'on voit le texte dans tous les cas mais qu'il reste ultra discret...


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

Marsh Posté le 12-07-2009 à 09:25:37    

et faire un XOR de ton texte avec el fond, ca serait pas plus simple ?

Reply

Marsh Posté le 12-07-2009 à 19:08:23    

hum en effet ca enlève 2 étapes !
PS: non, en fait c'est pas xor qu'il faut mais difference ! (voire exclusion)
et dans ce cas, il faut mettre le texte plutot blanc.

 

MERCI ! :D


Message édité par MisterBark le 13-07-2009 à 08:33:28

---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed