2016-07-20 14 views
0

Ich versuche die Komplementärfarbe einer bestimmten Farbe mit Python herauszufinden. Hier ist mein Code. Der Code gibt eine Fehlermeldung aus, die besagt "AttributeError: 'list' Objekt hat kein Attribut 'Join'" Ich brauche einen Hinweis. Außerdem könnte es einen robusteren Code geben, der die entgegengesetzte/komplementäre Farbe berechnet, nach der ich im Grunde suche. Ihre Vorschläge werden hilfreich sein.Komplementärfarbe/Gegenfarbe einer gegebenen Farbe herausfinden

from PIL import Image 

def complementaryColor(hex): 
    """Returns complementary RGB color 

    Example: 
    >>>complementaryColor('FFFFFF') 
    '000000' 
    """ 
    if hex[0] == '#': 
     hex = hex[1:] 
    rgb = (hex[0:2], hex[2:4], hex[4:6]) 
    comp = ['02%X' % (255 - int(a, 16)) for a in rgb] 
    return comp.join() 

andere ähnliche Funktion

def blackwhite(my_hex): 
    """Returns complementary RGB color 

    Example: 
    >>>complementaryColor('FFFFFF') 
    '000000' 
    """ 
    if my_hex[0] == '#': 
     my_hex = my_hex[1:] 
    rgb = (my_hex[0:2], my_hex[2:4], my_hex[4:6]) 
    comp = ['%X' % (0 if (15 - int(a, 16)) <= 7 else 15) for a in rgb] 
    return ''.join(comp) 


print blackwhite('#36190D') 
+1

Sie meinten '' '.join (comp) '? –

+0

Ich würde die Hex-Farbe in Farbton-Sättigung-Helligkeit ändern - HSL. Finde den komplementären (entgegengesetzten) Farbtongrad und wandle ihn in Hex um. – Afrowave

+0

@MosesKoledoye, ',' .join (comp) überwindet die Fehlermeldung, gibt aber bizarre Farbcodes aus. –

Antwort

1

Ihre join und Formatierung ein Update erforderlich ist. Listen keine join Methode haben, Streicher tun:

def complementaryColor(my_hex): 
    """Returns complementary RGB color 

    Example: 
    >>>complementaryColor('FFFFFF') 
    '000000' 
    """ 
    if my_hex[0] == '#': 
     my_hex = my_hex[1:] 
    rgb = (my_hex[0:2], my_hex[2:4], my_hex[4:6]) 
    comp = ['%02X' % (255 - int(a, 16)) for a in rgb] 
    return ''.join(comp) 

Die Formatierung für hex %02X für zwei Hex-Zeichen seines shoud und nicht '02%X'. Die spätere anhängt nur eine 02 zu einem verstümmelten Ausgabe 3 Zeichen führenden statt 6.


hex eingebaute Funktion, so dass Sie den Namen zu ändern betrachten kann, my_hex sagen zu vermeiden, dass die ursprüngliche hex Funktion Shadowing .

+0

es funktioniert jetzt wie erwartet; Kann der Code optimiert werden, um basierend auf einer Farbeingabe nur eine weiße oder eine schwarze Farbe auszugeben? –

+0

Ja, mit * thresholding *. Wenn die Ausgabe von '(255 - int (a, 16))' kleiner als der Schwellenwert von zB 127 ist, wird der Wert auf 0 gesetzt, andernfalls auf 255. Verwenden Sie dann für die korrekte bitweise Umschaltung 'comp = ['% X'% (0 if (15 - int (a, 16)) <= 7 else 15) für ein in my_hex] ' –

+0

hab es ... Ich habe deine letzte Funktion als blackwhite gepostet, aber es gibt keine erwartete Ausgabe für hex # 36190D es zurück sollte weiß zurückkehren, aber es ist schwarz zurück ... kannst du bitte einen Blick darauf werfen ... bitte –

Verwandte Themen