[Programación] Convertir archivos, jpg, png, etc a escala RGB

Emiliano Gavilan emilianogavilan en gmail.com
Lun Feb 11 13:01:27 ARDT 2008


On Mon, 11 Feb 2008 08:15:35 -0300
Horacio Castellini <horacio9573 en yahoo.com.ar> wrote:

> Holas...
> 
> Como conozco poco sobre algoritmos de compresión de imágenes, pregunto 
> si existe una utilidad que transforme una imagen *.png o *.jpg en un 
> archivo texto a tres columnas con la escala RGB.
> ----------------
> Para la lista programación:
> 
> Sino como puedo aplicar algunos de los intérpretes perl, etc... para 
> hacerlo... de manera tal que explore o por columna o filas los píxeles y 
> coloque alguna bandera (-1,-1,-1) como fin de columna o fila...

Fácil fácil con tcl/tk y una extensión (Img, http://tkimg.sourceforge.net)

8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----
# image2rgb.tcl
# Carga y muestra una imagen
# sacando por stdout los valores RGB

# Esto permite lanzar el script desde tclsh directamente
package require Tk
# Soporte extendido de imagenes.
# http://tkimg.sourceforge.net
# debian/ubuntu package: libtk-img
package require Img

proc uso {} {
	puts "Uso: $::argv0 imagen"
	exit 1
}

set imagefile [lindex $argv 0]

if {$argc != 1 || ![file exist $imagefile]} {
	uso
}

# Creamos la imagen
set img [image create photo -file $imagefile]

# Ponemos la imagen en una etiqueta y la mostramos
pack [label .l -bg white -image $img]

# Finalmente, sacamos los datos por stdout
puts [join [$img data] \n]

# Doble-Escape (ala VI!!) cierra la ventana y termina
bind all <Double-KeyPress-Escape> {exit 0}

8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----

Uso por demás de evidente. El formato de salida es:

emiliano en maq033:~$ wish8.5 image2rgb.tcl iconos/Crystal\ Clear/16x16/devices/Mod
em.png 
#000000 #000000 #000000 #000000 #000000 #000000 #000000 #000000 #000000 #000000 
#000000 #000000 #000000 #000000 #000000 #000000
#000000 #465164 #7b8da8 #8493a8 #8895ab #8a97ac #909cb0 #95a1b4 #a2aebf #a5b1c2 
#aab4c4 #aeb8c7 #afb9c8 #8294ae #2c323f #000000
#000000 #6e819c #8fa6c0 #8c9eb2 #94a6ba #94a5b8 #a5b6c8 #b4c4d6 #b6c6d6 #bac9d8 
#bfcddc #c4d1df #cbd7e2 #a4bad2 #4d5c70 #000000
#0d0d0d #758aa5 #8aa0b9 #8699ae #8ea0b5 #8f9fb4 #a0b1c4 #acbccf #b0bfd2 #b4c3d4 
#b8c7d7 #bdcbd9 #c7d2de #a7bbd1 #586880 #000000
#14141c #7d94b0 #89a0b9 #8699af #8ea0b6 #8fa0b5 #9eafc4 #a8b9cd #acbccf #b1c0d2 
#b5c4d5 #bac7d7 #c3cfdc #abbed2 #657891 #000000
#20232c #829bb8 #859bb5 #7e8fa6 #8598af #8697ad #98aac0 #a4b7cb #a8bacd #adbdcf 
#b2c1d3 #b6c5d5 #becbd9 #afc0d3 #7185a0 #05050b
#2a313c #859ebb #8aa2bc #8fa6bf #93a9c1 #98adc4 #9bb0c6 #a0b2c8 #a4b6ca #a9bacd 
#aebed0 #b2c2d3 #b9c7d6 #b2c2d4 #7b91ac #0e0e16
#393f4e #89a1bf #879fba #8ba2bc #90a6c0 #94aac1 #99aec4 #9eb1c7 #a2b5c9 #a7b8cc 
#abbccf #b0c0d2 #b6c5d5 #b6c5d6 #849bb6 #181b23
#495565 #92aac5 #8ca3bd #90a6bf #95aac2 #99adc4 #9db1c7 #a2b4c9 #a6b8cb #aabbce 
#afbfd0 #b3c2d3 #b8c6d5 #bbc9d9 #94aac2 #272b36
#586476 #9eb5cd #96abc3 #97acc3 #9cb0c5 #a0b3c8 #a3b6ca #a7b9cc #abbccf #b0c0d1 
#b4c3d3 #b7c6d5 #bcc9d8 #c0cddc #a6b9d0 #343b46
#808895 #c8d5e2 #bdcfde #bfcfdd #bfd0de #c1d2df #c3d3e0 #c3d4e2 #c8d4e0 #cbd4e3 
#ccd5e3 #cdd7e2 #cfd8e3 #d1dae4 #cdd8e5 #50555f
#6c7a8f #8ca6c0 #998698 #8d93aa #968b9e #908da2 #8e8ca2 #98879a #8a99b5 #7c9da6 
#7a9aa3 #8aa0bd #889fba #879fb9 #91a9c4 #4b5461
#687e97 #96869d #bb525b #a85f6d #ab6572 #b4515c #a16b7a #be4e57 #8098b1 #48a35b 
#749c9c #869dbc #849db8 #849db8 #8ba6c3 #495465
#78899b #d1b4c0 #cda8b3 #d3a2ab #c8b2c0 #d39ca5 #cbaeba #cea3b0 #b0ced8 #8fca9d 
#b2c5d8 #b2c4d9 #b2c4d8 #b3c5d9 #b8cbe0 #515864
#222228 #535a61 #505a61 #505861 #4f5760 #505a61 #505861 #4f5861 #50535d #555563 
#50555d #50555d #50555d #50555e #4e525a #111115
#000000 #000000 #000000 #000000 #000000 #000000 #000000 #000000 #000000 #000000 
#000000 #000000 #000000 #000000 #000000 #000000

O sea, el valor rgb de cada pixel separado por espacios, con un \n al final
de cada fila.
Si el script falla, el mensaje de error debería ser por demás de claro, p.ej

emiliano en maq033:~$ wish8.5 image2rgb.tcl image2rgb.tcl 
Error in startup script: couldn't recognize data in image file "image2rgb.tcl"
    while executing
"image create photo -file $imagefile"
    invoked from within
"set img [image create photo -file $imagefile]"
    (file "image2rgb.tcl" line 25)

Espero que sirva, saludos

Emiliano
------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre     : no disponible
Tipo       : application/pgp-signature
Tamaño     : 186 bytes
Descripción: no disponible
Url        : http://www.lugro.org.ar/pipermail/programacion/attachments/20080211/3157ef8c/attachment.pgp


Más información sobre la lista de distribución Programacion