Autor Tema: Ayuda para modificar imagenes de graficas  (Leído 156 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado chve

  • Jr. Member
  • **
  • Mensajes: 53
    • Ver Perfil
    • Meteo Moncofa
Ayuda para modificar imagenes de graficas
« en: 07 de Junio del 2021, 12:21:52 pm »
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.  ;)

Desconectado jmviper

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 3.605
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:Ayuda para modificar imagenes de graficas
« Respuesta #1 en: 07 de Junio del 2021, 16:44:20 pm »
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.



Archena, Valle de Ricote (Murcia). 120 msnm. 19.428 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es

Desconectado chve

  • Jr. Member
  • **
  • Mensajes: 53
    • Ver Perfil
    • Meteo Moncofa
Re:Ayuda para modificar imagenes de graficas
« Respuesta #2 en: 07 de Junio del 2021, 17:38:39 pm »
Gracias jmviper  plau2

Voy a ver yo también que encuentro.

Desconectado jmviper

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 3.605
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:Ayuda para modificar imagenes de graficas
« Respuesta #3 en: 08 de Junio del 2021, 17:28:15 pm »
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: [Seleccionar]
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

concretamente este trozo:

Código: [Seleccionar]
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)

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.

« Última modificación: 08 de Junio del 2021, 20:11:20 pm por jmviper »


Archena, Valle de Ricote (Murcia). 120 msnm. 19.428 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es

Desconectado chve

  • Jr. Member
  • **
  • Mensajes: 53
    • Ver Perfil
    • Meteo Moncofa
Re:Ayuda para modificar imagenes de graficas
« Respuesta #4 en: 09 de Junio del 2021, 00:55:10 am »
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

Desconectado jmviper

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 3.605
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:Ayuda para modificar imagenes de graficas
« Respuesta #5 en: 09 de Junio del 2021, 08:27:55 am »
Sí sí.... los que usamos weewx generalmente usamos la versión más actual  *+* *+*

La mía también es la 4.5.1, la que te va a instalar de su repositorio sudo apt update && apt upgrade

Como dije en mi anterior respuesta ese código vale solo para el formato que empieza por 0x ya que el hexadecimal que empieza por # no está el código preparado porque no lleva las dos últimas cifras hexadecimales del canal alfa.

De todas formas cuando se pone un hexadecimal en el skin se tiene que poner siempre entre comillas (o dobles o simples) al igual que un nombre de color literal así que tenemos que poner "#ff0000" o "red" para el color rojo o tira esa ristra de errores.

Ya dije que espera colores en formato RGBA al haber sido modificada la función en genplot.py de RGB a RGBA

He modificado código de utilities.py para quedar la función así:

Código: [Seleccionar]
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:
            if x.startswith('#'):
                if (len(x) == 7):
                    x = x + "ff"
            r, g, b, a = ImageColor.getrgb(x)
            return r + g * 256 + b * 256 * 256 + a * 256 * 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

Ahora detectará también el formato hexadecimal y le pondrá ff al final si no lleva los 8 dígitos del canal alfa, por ejemplo #ff0000 lo convertirá a #ff0000ff por lo que ya puedes añadirle el canal alfa directamente en el skin en hexadecimal.

Lo que no va a funcionar (no dibujará el color) es si lo ponemos con el nombre literal.... así con "red" no dibujará el rojo, tendremos que poner o 0x0000ff ó "#ff0000" ya que como digo espera el color en formato rgba.


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.


Seguro, sería lo mejor, como ves es modificar algo de código en alguna función. De todas formas si modificas esos archivos que he puesto al actualizar weewx lo más probable es que te los sobrescriba, así que pon una copia de ambos donde quieras y si sale actualización los vuelves a poner, pero siempre está el riesgo de que traigan funciones nuevas o modificadas y le pongamos el antiguo por lo que puede dar algún error.... por suerte ni el código de esos archivos ni weewx se actualizan muy a menudo.
Lo mejor es que vinieran ya modificados para aceptar el canal alfa en la futura actualización... alguien tendrá que decírselo  ;)

saludos
« Última modificación: 09 de Junio del 2021, 15:57:51 pm por jmviper »


Archena, Valle de Ricote (Murcia). 120 msnm. 19.428 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es

Desconectado jmviper

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 3.605
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:Ayuda para modificar imagenes de graficas
« Respuesta #6 en: 09 de Junio del 2021, 15:20:00 pm »
Bueno como en programación todo es posible y no hay dos sin tres he modificado la función para que acepte también los literales así que aceptará "red", "black", "blue" o el que le pongamos, eso sí saldrá con el canal alfa opaco.

Nuevo adjunto.
« Última modificación: 09 de Junio del 2021, 15:58:24 pm por jmviper »


Archena, Valle de Ricote (Murcia). 120 msnm. 19.428 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es

Desconectado chve

  • Jr. Member
  • **
  • Mensajes: 53
    • Ver Perfil
    • Meteo Moncofa
Re:Ayuda para modificar imagenes de graficas
« Respuesta #7 en: 09 de Junio del 2021, 22:19:49 pm »
 Gracias jmviper. apla3

No había probado de meter los hexadecimales entrecomillados.   :;

Gracias por tus aportaciones.

Ya he comentado el tema en el grupo oficial de Weewx. A ver que dicen.  ;)

Desconectado jmviper

  • Investigación
  • Hero Member
  • ******
  • Mensajes: 3.605
  • "Vortex Complex"
    • Ver Perfil
    • www.meteoarchena.es
  • Estación: Archena - ESMUR3000000030600B
Re:Ayuda para modificar imagenes de graficas
« Respuesta #8 en: 09 de Junio del 2021, 23:59:22 pm »
Perfecto  :)


Archena, Valle de Ricote (Murcia). 120 msnm. 19.428 hab.
Davis Vantage Pro2 Plus

www.meteoarchena.es