#1 Tue 04 November 2014 09:15
- Pierre
- DesCartesPourUnMondeMeilleur
- Date d'inscription: 22 Sep 2005
- Messages: 1643
QGIS 2.4 : convertir une chaine hexa en entier
ALoha,
J'ai une chaîne hexa sur 6 caractère contenant une valeur de couleur. Comment faire pour la convertir dans mon éditeur de source de propriété en code rgb. L'opérateur color_rgb attend des valeurs entières.
D'avance, merci
art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.
Hors ligne
#2 Tue 04 November 2014 10:51
Re: QGIS 2.4 : convertir une chaine hexa en entier
Bonjourt Pierre,
les fonction proposées dans l'onglet Couleur du générateur d'expression ne proposent pas en effet de créer une couleur à partir d'un code hexadécimal... Cela peut déjà faire l'objet d'une demande de fonctionnalité.
Par contre, il semble possible de faire la chose en python : http://pythonjunkie.wordpress.com/2012/ … in-python/
A intégrer aux fonctions personnelles ou à ajouter au plugin "expression plus" en attendant une version future :
https://plugins.qgis.org/plugins/qgsexpressionsplus/
Pour récupérer ensuite les composantes R, V et B utilisables par la source de définition des propriété...
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
#3 Tue 04 November 2014 13:43
Re: QGIS 2.4 : convertir une chaine hexa en entier
Voici une fonction que j'ai ajouté au fichier functions.py du plugin "expression plus". Je vais faire suivre à l'auteur :
Code:
@qgsfunction(1, "Expressions +", register=False) def hexa_to_rgb(values, feature, parent): """ Returns an hexa_to_rgb. <h4>Syntax</h4> <p>hexa_to_rgb(<i>color hexadecimal code</i>)</p> <h4>Arguments</h4> <p><i>color</i> → a color in hexa code.<br></p> <h4>Example</h4> <p><!-- Show example of function.--> hexa_to_rgb('#ffffff') → '255.255.255.255'</p> """ value = values[0].lstrip('#') lv = len(value) rgb = str(tuple(int(value[i:i+lv/3], 16) for i in range(0, lv, lv/3))).strip('()')+',255' return rgb
Il faut ensuite ajouter la fonction à la liste :
Code:
functions = [ramp_color_rgb, dow, halton_sequence, quasi_rand, get_color_part, set_color_part, hexa_to_rgb]
J'ai mis une opacité par défaut à 255.
Ainsi hexa_to_rgb('#ffffff') retourne la chaine '255.255.255.255'
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
#4 Thu 06 November 2014 15:36
- Pierre
- DesCartesPourUnMondeMeilleur
- Date d'inscription: 22 Sep 2005
- Messages: 1643
Re: QGIS 2.4 : convertir une chaine hexa en entier
Merci à toi. Je vais tester cela me paraît parfait.
La fonction retourne la chaîne avec des points ou bien des virgules ?
Sachant que je souhaite utiliser la fonction pour définir une couleur dans le gestionnaire de symbologie et que la chaîne attendue est plutôt du type "R,V,B,Alpha".
Dernière modification par Pierre (Thu 06 November 2014 15:38)
art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.
Hors ligne
#5 Thu 06 November 2014 18:19
Re: QGIS 2.4 : convertir une chaine hexa en entier
Bonsoir Pierre,
Des virgules, comme attendu par QGis, par contre l'opacité est codée en dur dans la fonction à 255.
Mathieu BOSSAERT
Association GeoRezo
Hors ligne