Software > WeeWX
Ayuda para modificar imagenes de graficas
chve:
Quiero modificar y personalizar las graficas. El problema que encuentro es que no me acepta los colores hexadecimales en este formato #313a43ff con canal alpha.
weewx[7131] ERROR weewx.reportengine: **** self.image_background_color = tobgr(config_dict.get('image_background_color', '0xf5f5f5'))
weewx[7131] ERROR weewx.reportengine: **** ValueError: Unknown color specifier: '#313a43ff'. Colors must be specified as 0xBBGGRR, #RRGGBB, or standard color names.
Tampoco funciona sin el canal alpha #313a43
weewx[8326] ERROR weewx.reportengine: **** self.image_background_color = tobgr(config_dict.get('image_background_color', '0xf5f5f5'))
weewx[8326] ERROR weewx.reportengine: **** ValueError: Unknown color specifier: ''. Colors must be specified as 0xBBGGRR, #RRGGBB, or standard color names.
Si pudierais indicarme donde obtener info sobre ImageGenerator
Gracias. ;)
jmviper:
Hola chve
Weewx usa el módulo Pillow de Python para generar los gráficos.
Los archivos que dibujan los gráficos están en /usr/share/weewx/weeplot (genplot.py y utilities.py)
Tal como te indica el log:
Colors must be specified as 0xBBGGRR, #RRGGBB, or standard color names.
tienes que ponerlos en esos formatos que no llevan canal alfa. Para ello habría que modificar código de esas librerías que generan los gráficos.
Intentaré hacer alguna prueba a ver si consigo algo.
chve:
Gracias jmviper plau2
Voy a ver yo también que encuentro.
jmviper:
Bueno veamos
Tras hacer pruebas no es muy difícil pero hay que modificar algo de código....
Weewx como puse antes acepta los formatos 0xBBGGRR, #RRGGBB y nombre de color estándar. El primero como ves es el mismo que el hexadecimal (segundo) pero al revés ya que lo lee como "Little-endian" (de derecha a izquierda) y ahí es por donde podemos meterle mano ya que para el hexadecimal habría que modificar más código.
Así por ejemplo para el hexadecimal #4598f1 tendríamos que ponerlo como 0x1f8954
La función que crea los gráficos está en /usr/share/weewx/weeplot/genplot.py y en su línea 200 pone lo siguiente:
image = Image.new("RGB", (self.image_width, self.image_height), self.image_background_color)
Eso crea la nueva imagen. Tenemos que editarlo y poner "RGBA" en vez de "RGB" y con eso ya le metemos el formato con el canal alfa.
Ocurre que si no le hemos puesto los dos dígitos del canal alfa al principio (y solo aceptará la notación Little-endian) no los dibujará por lo que he modificado la función que convierte a brg (Little-endian contrario a RGB) quedando la función así:
--- Código: ---def tobgr(x):
"""Convert a color to little-endian integer. The PIL wants either
a little-endian integer (0xBBGGRR) or a string (#RRGGBB). weewx expects
little-endian integer. Accept any standard color format that is known
by ImageColor for example #RGB, #RRGGBB, hslHSL as well as standard color
names from X11 and CSS3. See ImageColor for complete set of colors.
"""
if isinstance(x, six.string_types):
if x.startswith('0x'):
if (len(x) == 8):
x = x.split('x')
x = '0xff' + x[1]
return int(x, 0)
try:
r, g, b = ImageColor.getrgb(x)
return r + g * 256 + b * 256 * 256
except ValueError:
try:
return int(x)
except ValueError:
raise ValueError("Unknown color specifier: '%s'. "
"Colors must be specified as 0xBBGGRR, #RRGGBB, or standard color names." % x)
return x
--- Fin del código ---
concretamente este trozo:
--- Código: ---if isinstance(x, six.string_types):
if x.startswith('0x'):
if (len(x) == 8):
x = x.split('x')
x = '0xff' + x[1]
return int(x, 0)
--- Fin del código ---
le pone 2 efes (ff) anteriores para que tengan canal alfa los colores puestos del skin por defecto o no se dibujarían.
Este código está al final del archivo /usr/share/weewx/weeplot/utilities.py
De todas formas adjunto el archivo entero al final del mensaje.
Tras los cambios a los archivos hay que reiniciar weewx.
Por lo tanto el color que se quiera modificar con canal alfa tendremos que modificarlo en el skin con el canal alfa justo detrás del 0x así que por ejemplo el rojo transparente (con transparencia total) sería 0x000000ff y el más opaco sin transparencia 0xff0000ff empezando por 0xff el más opaco y con 0x00 el más transparente (no habría color).
Ya sería ir editando los colores del skin con ese formato. Ve probando a ver si es lo que estás buscando.
chve:
Agradezco tu interés jmviper. Sinceramente, ;D
Funciona perfectamente lo que has expuesto, pero... Siempre hay un pero :;
Esto me soluciona a mi el problema, pro no al skin.
Estoy corriendo la versión mas actual, weewx 4.5.1 y quizá sea cosa de la versión weewx. Como he comentado tampoco funcionan los colores hexadecimales con el formato #313a43, da error. No he probado con los nombres estándar, no los voy a utilizar.
Para que se me entienda. Si cambio "image_background_color = 0x433a31" por "image_background_color = #313a43" no me genera la imagen y da error.
weewx[8326] ERROR weewx.reportengine: **** self.image_background_color = tobgr(config_dict.get('image_background_color', '0xf5f5f5'))
weewx[8326] ERROR weewx.reportengine: **** ValueError: Unknown color specifier: ''. Colors must be specified as 0xBBGGRR, #RRGGBB, or standard color names.
Creo que seria cuestión de comentarlo en el soporte oficial. Independientemente que sea un posible error no entiendo como se limita esa opción para los colores de las graficas.
Gracias nuevamente jmviper. Un saludo
Navegación
[#] Página Siguiente
Ir a la versión completa