[Parche] Soporte para puntos de control en PNGs

Started by josebita, December 31, 2012, 05:24:47 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

josebita

Hola:


Adjunto un parche que da soporte a la lectura de puntos de control desde los metadatos de los PNGs.
Adjunto también un PNG con los metadatos modificados para establecer los puntos de control.
Si leeis los metadatos del PNG (con un comando como identify -verbose logo_controlpoints.png) obtendreis algo así:

Image: logo_controlpoints.png
  Format: PNG (Portable Network Graphics)
  Class: DirectClass
  Geometry: 201x150+0+0
  Resolution: 3.54x3.54
  Print size: 56.7797x42.3729
  Units: PixelsPerCentimeter
  Type: TrueColorAlpha
  Endianess: Undefined
  Colorspace: sRGB
  Depth: 8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
    alpha: 1-bit
  Channel statistics:
    Red:
      min: 0 (0)
      max: 255 (1)
      mean: 125.938 (0.493875)
      standard deviation: 102.048 (0.40019)
      kurtosis: -1.65272
      skewness: -0.226675
    Green:
      min: 0 (0)
      max: 255 (1)
      mean: 110.712 (0.434165)
      standard deviation: 94.4007 (0.370199)
      kurtosis: -1.68909
      skewness: -0.0692594
    Blue:
      min: 0 (0)
      max: 218 (0.854902)
      mean: 42.5343 (0.166801)
      standard deviation: 57.1171 (0.223989)
      kurtosis: 0.584605
      skewness: 1.2628
    Alpha:
      min: 0 (0)
      max: 255 (1)
      mean: 165.255 (0.64806)
      standard deviation: 121.782 (0.477575)
      kurtosis: -1.61554
      skewness: 0.620047
  Image statistics:
    Overall:
      min: 0 (0)
      max: 255 (1)
      mean: 92.2323 (0.361695)
      standard deviation: 96.7193 (0.379291)
      kurtosis: -1.16068
      skewness: 0.532692
  Alpha: none   #00000000
  Rendering intent: Perceptual
  Gamma: 0.454545
  Chromaticity:
    red primary: (0.64,0.33)
    green primary: (0.3,0.6)
    blue primary: (0.15,0.06)
    white point: (0.3127,0.329)
  Interlace: None
  Background color: white
  Border color: srgba(223,223,223,1)
  Matte color: grey74
  Transparent color: none
  Compose: Over
  Page geometry: 201x150+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Zip
  Orientation: Undefined
  Properties:
    BennuGD_CP0: 0;0
    BennuGD_CP1: 2;143
    BennuGD_CP2: 195;147
    BennuGD_CP3: 100;75
    date:create: 2012-12-31T05:23:03+01:00
    date:modify: 2012-12-31T05:54:16+01:00
    png:IHDR.bit_depth       : 8
    png:IHDR.color_type      : 6 (RGBA)
    png:IHDR.interlace_method: 0 (Not interlaced)
    png:IHDR.width,height    : 201, 150
    png:pHYs                 : x_res=354, y_res=354, units=1
    png:text                 : 4 tEXt/zTXt/iTXt chunks were found
    signature: f1b0af7c72e11c11e5e981d4cf575c18f878a5e6b6d25bcdacc81e74f708c56d
  Artifacts:
    filename: logo_controlpoints.png
    verbose: true
  Tainted: False
  Filesize: 24.9KB
  Number pixels: 30.1K
  Pixels per second: 3.015MB
  User time: 0.000u
  Elapsed time: 0:01.010
  Version: ImageMagick 6.8.1-6 2012-12-29 Q16 http://www.imagemagick.org

Obviamente la parte interesante es la destacada. El parche utiliza esa información para establecer los puntos de control al cargar el PNG. El soporte -de momento- es de lectura pero si es interesante puedo hacer que al guardar los png se guarde este tipo de información también.

La gracia es que de esta forma se pueden guardar los gráficos del juego en un formato fácilmente editable con la mayor parte de editores gráficos. Muchos de ellos permiten la edición de los metadatos pero, para hacer pruebas, me he creado una pequeña utilidad que se encarga de guardar los metadatos sobre los puntos de control.
Os dejo una captura.

Lo dicho, si es interesante creo el parche de escritura y subo binarios de la herramienta.

osk


panreyes

A mí no me acaba de gustar. Yo prefiero que pensemos en un estándar para que al cargar un PNG llamado "logo.png" se carguen los puntos de control de "logo.png.pdc" o algo parecido.


El motivo es que cada dos por tres estamos re-exportando PNGs desde Photoshop o InkScape, y si tuviésemos esa información en los PNGs, sería bastante lastre recolocarla una y otra vez.


Vamos, en mi caso no me serviría de mucho xD

josebita

Quote from: PiXeL on December 31, 2012, 09:57:26 AM
A mí no me acaba de gustar. Yo prefiero que pensemos en un estándar para que al cargar un PNG llamado "logo.png" se carguen los puntos de control de "logo.png.pdc" o algo parecido.


El motivo es que cada dos por tres estamos re-exportando PNGs desde Photoshop o InkScape, y si tuviésemos esa información en los PNGs, sería bastante lastre recolocarla una y otra vez.


Vamos, en mi caso no me serviría de mucho xD
También pensé en algo así, sí. Pero me parece menos "elegante" tener la información que se puede meter de forma estándar y compatible hacia atrás desperdigada en dos ficheros.
Además, no sería difícil añadir a la cosa gráfica esa que programé ayer la capacidad de exportar los puntos de control a un fichero CSV y volver a importarlos. Incluso desde línea de comandos, para que se pueda ejecutar desde un script.

KeoH

Yo todo lo que sean herramientas que ayuden al desarrollo me parece estupendo !! xD pero me gustaria que integraramos todo lo que hacemos en vez de hacer mil aplicaciones q va cada una a su rollo xD pero mola. Yo tenia pensado que los gráficos de juego estén en pngs independientes para trabajar sobre ellos mejor q con un fpg, pero claro la comodidad del fpg es importante xD

SplinterGU

simple... joseba, que editor grafico permite setear puntos de control usando metadatos en los png? si ningun editor existente permite manejar puntos de control en un png, no le veo la ventaja... la idea es que un editor grafico estandard, como por ejemplo el gimp, nos permita setear puntos de control y los guarde en metadatos... si tengo que meter yo a mano, largas strings, para indicar los puntos de control, prefiero realmente crear un archivo de texto o xml con el mismo nombre del archivo y meter ahi la lista de puntos de control... o meterlo en codigo, o generar directamente un .map o .fpg... porque la propuesta, hasta donde entiendo es mas laboriosa, y nada me dice que si edito/convierto el grafico con un editor/conversor no me quite esos metadatos o me los pise con otra cosa.

pero explica un poco mas, quizas no entendi bien lo que propones.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Quote from: SplinterGU on December 31, 2012, 06:50:37 PM
simple... joseba, que editor grafico permite setear puntos de control usando metadatos en los png? si ningun editor existente permite manejar puntos de control en un png, no le veo la ventaja... la idea es que un editor grafico estandard, como por ejemplo el gimp, nos permita setear puntos de control y los guarde en metadatos... si tengo que meter yo a mano, largas strings, para indicar los puntos de control, prefiero realmente crear un archivo de texto o xml con el mismo nombre del archivo y meter ahi la lista de puntos de control... o meterlo en codigo, o generar directamente un .map o .fpg... porque la propuesta, hasta donde entiendo es mas laboriosa, y nada me dice que si edito/convierto el grafico con un editor/conversor no me quite esos metadatos o me los pise con otra cosa.

pero explica un poco mas, quizas no entendi bien lo que propones.
Estaba pensando más en la gente de la comunidad que hace herramientas para Bennu: Es mucho más fácil hacer una herramienta que edite un formato estándar como el PNG y le meta unos cuantos metadatos que hacer una herramienta para editar un formato no estándar.
Una vez creados -como sea- también es más sencillo visualizar los PNG que los MAP, porque están en formato estándar.

Y, si no, siempre se puede hacer algún plug-in para gimp y amigos que meta los metadatos.

Pero vamos, que ya digo que es sólo una propuesta con un pequeño ejemplo de programación: si no convence no pacha nada :)

SplinterGU

entiendo... estaria bueno algun sistema que sea standard... donde permita setear algo y tomarlo... como ser por ejemplo, la transparencia de los png...

pero metelo en tu port, no hay problema con eso...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2