मुझे इस # 008040 की तरह कुछ (0, 128, 64) को बदलने की आवश्यकता है। मुझे यकीन नहीं है कि बाद में कॉल करना मुश्किल है, जिससे खोज मुश्किल हो जाती है।
मुझे इस # 008040 की तरह कुछ (0, 128, 64) को बदलने की आवश्यकता है। मुझे यकीन नहीं है कि बाद में कॉल करना मुश्किल है, जिससे खोज मुश्किल हो जाती है।
जवाबों:
प्रारूप ऑपरेटर का उपयोग करें %
:
>>> '#%02x%02x%02x' % (0, 128, 64)
'#008040'
ध्यान दें कि यह सीमा की जाँच नहीं करेगा ...
>>> '#%02x%02x%02x' % (0, -1, 9999)
'#00-1270f'
'#%x%x%x' % (r, g, b)
def clamp(x):
return max(0, min(x, 255))
"#{0:02x}{1:02x}{2:02x}".format(clamp(r), clamp(g), clamp(b))
यह स्ट्रिंग प्रारूपण की पसंदीदा विधि का उपयोग करता है, जैसा कि पीईपी 3101 में वर्णित है । यह भी उपयोग करता है min()
औरmax
यह सुनिश्चित करने के लिए 0 <= {r,g,b} <= 255
।
अपडेट करेंनीचे दिए गए सुझाव के अनुसार ने क्लैंप फ़ंक्शन को जोड़ा।
अद्यतन सवाल और दिए गए संदर्भ के शीर्षक से, यह स्पष्ट होना चाहिए कि यह [0,255] में 3 ints की उम्मीद करता है और हमेशा 3 ऐसे ints पारित होने पर एक रंग वापस करेगा। हालाँकि, टिप्पणियों से, यह सभी के लिए स्पष्ट नहीं हो सकता है, इसलिए इसे स्पष्ट रूप से बताएं:
तीन
int
मान प्रदान किए गए , यह एक रंग का प्रतिनिधित्व करने वाला एक वैध हेक्स ट्रिपल लौटाएगा। यदि वे मान [0,255] के बीच हैं, तो यह उन लोगों को RGB मानों के रूप में मानेगा और उन मानों के अनुरूप रंग लौटाएगा।
यह एक पुराना प्रश्न है, लेकिन जानकारी के लिए, मैंने रंगों और कॉलोर्मैप से संबंधित कुछ उपयोगिताओं के साथ एक पैकेज विकसित किया है और इसमें rgb2hex फ़ंक्शन है जिसमें आप ट्रिपल को हेक्सा मान में परिवर्तित करना चाहते हैं (जो कि कई अन्य पैकेजों में पाया जा सकता है, जैसे matplotlib)। यह पिपी पर है
pip install colormap
और फिर
>>> from colormap import rgb2hex
>>> rgb2hex(0, 128, 64)
'##008040'
इनपुट की वैधता की जाँच की जाती है (मान 0 और 255 के बीच होना चाहिए)।
मैंने इसके लिए एक पूर्ण अजगर कार्यक्रम बनाया है, निम्न कार्य आरजीबी को हेक्स में बदल सकते हैं और इसके विपरीत।
def rgb2hex(r,g,b):
return "#{:02x}{:02x}{:02x}".format(r,g,b)
def hex2rgb(hexcode):
return tuple(map(ord,hexcode[1:].decode('hex')))
आप निम्न लिंक पर पूर्ण कोड और ट्यूटोरियल देख सकते हैं: पायथन का उपयोग करके आरजीबी हेक्स और हेक्स से आरजीबी रूपांतरण
triplet = (0, 128, 64)
print '#'+''.join(map(chr, triplet)).encode('hex')
या
from struct import pack
print '#'+pack("BBB",*triplet).encode('hex')
python3 थोड़ा अलग है
from base64 import b16encode
print(b'#'+b16encode(bytes(triplet)))
ध्यान दें कि यह केवल python3.6 और इसके बाद के संस्करण के साथ काम करता है।
def rgb2hex(color):
"""Converts a list or tuple of color to an RGB string
Args:
color (list|tuple): the list or tuple of integers (e.g. (127, 127, 127))
Returns:
str: the rgb string
"""
return f"#{''.join(f'{hex(c)[2:].upper():0>2}' for c in color)}"
ऊपर के बराबर है:
def rgb2hex(color):
string = '#'
for value in color:
hex_string = hex(value) # e.g. 0x7f
reduced_hex_string = hex_string[2:] # e.g. 7f
capitalized_hex_string = reduced_hex_string.upper() # e.g. 7F
string += capitalized_hex_string # e.g. #7F7F7F
return string
आप लैम्ब्डा और एफ-स्ट्रिंग्स का उपयोग कर सकते हैं (अजगर 3.6+ में उपलब्ध है)
rgb2hex = lambda r,g,b: f"#{r:02x}{g:02x}{b:02x}"
hex2rgb = lambda hx: (int(hx[0:2],16),int(hx[2:4],16),int(hx[4:6],16))
प्रयोग
rgb2hex(r,g,b) #output = #hexcolor
hex2rgb("#hex") #output = (r,g,b) hexcolor must be in #hex format
def RGB(red,green,blue): return '#%02x%02x%02x' % (red,green,blue)
background = RGB(0, 128, 64)
मुझे पता है कि पायथन में एक-लाइनर्स जरूरी नहीं कि कृपया देखें। लेकिन कई बार मैं पायथन पार्सर की अनुमति का फायदा नहीं उठा सकता। यह Dietrich Epp के समाधान (सर्वोत्तम) के रूप में एक ही उत्तर है, लेकिन एकल पंक्ति फ़ंक्शन में लिपटा हुआ है। तो, धन्यवाद आप Dietrich!
मैं इसे अब tkinter के साथ उपयोग कर रहा हूँ :-)
यहां स्थितियों को संभालने के लिए एक अधिक संपूर्ण कार्य है जिसमें आप रेंज [0,1] या श्रेणी [0,253] में RGB मान रख सकते हैं ।
def RGBtoHex(vals, rgbtype=1):
"""Converts RGB values in a variety of formats to Hex values.
@param vals An RGB/RGBA tuple
@param rgbtype Valid valus are:
1 - Inputs are in the range 0 to 1
256 - Inputs are in the range 0 to 255
@return A hex string in the form '#RRGGBB' or '#RRGGBBAA'
"""
if len(vals)!=3 and len(vals)!=4:
raise Exception("RGB or RGBA inputs to RGBtoHex must have three or four elements!")
if rgbtype!=1 and rgbtype!=256:
raise Exception("rgbtype must be 1 or 256!")
#Convert from 0-1 RGB/RGBA to 0-255 RGB/RGBA
if rgbtype==1:
vals = [255*x for x in vals]
#Ensure values are rounded integers, convert to hex, and concatenate
return '#' + ''.join(['{:02X}'.format(int(round(x))) for x in vals])
print(RGBtoHex((0.1,0.3, 1)))
print(RGBtoHex((0.8,0.5, 0)))
print(RGBtoHex(( 3, 20,147), rgbtype=256))
print(RGBtoHex(( 3, 20,147,43), rgbtype=256))
में अजगर 3.6 , तो आप उपयोग कर सकते हैं च-तार इस क्लीनर बनाने के लिए:
rgb = (0,128, 64)
f'#{rgb[0]:02x}{rgb[1]:02x}{rgb[2]:02x}'
बेशक आप इसे एक फंक्शन में रख सकते हैं , और एक बोनस के रूप में, मान गोल हो जाते हैं और इंट में बदल जाते हैं :
def rgb2hex(r,g,b):
return f'#{int(round(r)):02x}{int(round(g)):02x}{int(round(b)):02x}'
rgb2hex(*rgb)
आप बिट बुद्धिमान ऑपरेटरों का भी उपयोग कर सकते हैं, जो बहुत ही कुशल है, हालांकि मुझे संदेह है कि आप इस तरह से कुछ के साथ दक्षता के बारे में चिंतित होंगे। यह अपेक्षाकृत साफ भी है। ध्यान दें कि यह क्लैंप या चेक बाउंड नहीं करता है। कम से कम पायथन 2.7.17 के बाद से इसका समर्थन किया गया है ।
hex(r << 16 | g << 8 | b)
और इसे बदलने के लिए यह एक # के साथ शुरू होता है आप कर सकते हैं:
"#" + hex(243 << 16 | 103 << 8 | 67)[2:]
मैं वास्तव में हैरान हूं कि किसी ने इस दृष्टिकोण का सुझाव नहीं दिया:
पायथन 2 और 3 के लिए:
'#' + ''.join('{:02X}'.format(i) for i in colortuple)
अजगर 3.6+:
'#' + ''.join(f'{i:02X}' for i in colortuple)
एक समारोह के रूप में:
def hextriplet(colortuple):
return '#' + ''.join(f'{i:02X}' for i in colortuple)
color = (0, 128, 64)
print(hextriplet(color))
#008040
वेबकोर्स नामक एक पैकेज है। https://github.com/ubernostrum/webcolors
इसका एक तरीका है webcolors.rgb_to_hex
>>> import webcolors
>>> webcolors.rgb_to_hex((12,232,23))
'#0ce817'