Parsing et Unparsing terminés et fonctionnel, sortie vers autre fichier avec modification fonctionne.\nReste à modifier le header en fonction du parsage du content (ex: width, height, ...). Enfin git status!
This commit is contained in:
parent
c4ae166f8f
commit
9a9101ed77
40
code/bmp.py
40
code/bmp.py
|
@ -8,24 +8,32 @@ from classes import *
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
# lecture du fichier
|
||||||
|
with open( sys.argv[1] ) as file:
|
||||||
|
binFile = file.read()
|
||||||
|
|
||||||
|
# Instanciation du BMPFile
|
||||||
img = BMPFile()
|
img = BMPFile()
|
||||||
img.parse( sys.argv[1] );
|
|
||||||
|
# Parsing
|
||||||
|
img.parse( binFile );
|
||||||
### print header human-readable data ###
|
|
||||||
#print img.header.info()
|
|
||||||
|
|
||||||
### print file human-readable data ###
|
|
||||||
#print img.intData
|
|
||||||
|
|
||||||
### print header human-readable data ###
|
|
||||||
#print img.header.intData
|
|
||||||
|
|
||||||
### print content human-readable data ###
|
|
||||||
#print img.content.intData
|
|
||||||
|
|
||||||
|
|
||||||
|
# MODIFICATIONS des pixels
|
||||||
for line in img.content.map:
|
for line in img.content.map:
|
||||||
for pixel in line:
|
for pixel in line:
|
||||||
print "rgb(%s, %s, %s)" % (pixel.r, pixel.g, pixel.b)
|
pixel.r = 255
|
||||||
print
|
pixel.g = 75
|
||||||
|
pixel.b = 255
|
||||||
|
|
||||||
|
|
||||||
|
# Unparsing
|
||||||
|
img.unparse()
|
||||||
|
|
||||||
|
|
||||||
|
print img.binData
|
||||||
|
|
||||||
|
# for line in img.content.map:
|
||||||
|
# for pixel in line:
|
||||||
|
# print "rgb(%s, %s, %s)" % (pixel.r, pixel.g, pixel.b)
|
||||||
|
# print
|
|
@ -85,15 +85,13 @@ Classes:
|
||||||
/***************/
|
/***************/
|
||||||
/* ATTRIBUTS */
|
/* ATTRIBUTS */
|
||||||
/***************/
|
/***************/
|
||||||
* CONTENU BRUT HEADER COMPLETS (début jusqu'aux pixels)
|
* CONTENU PALETTE (fin du header jusqu'aux pixels)
|
||||||
- <binHeader> header format binaire (0 à offset)
|
- <binPalette> palette format binaire (header à offset)
|
||||||
- <intHeader> header format list de (0-255)
|
- <intPalette> palette format list de (0-255)
|
||||||
- <hexHeader> header format liste de (0x00 - 0xFF)
|
|
||||||
|
|
||||||
* CONTENU BRUT
|
* CONTENU BRUT
|
||||||
- <binData> contenu complet brut (binaire)
|
- <binData> contenu complet brut (binaire)
|
||||||
- <intData> contenu complet format liste de (0-255)
|
- <intData> contenu complet format liste de (0-255)
|
||||||
- <hexData> contenu complet format liste de (0x00 - 0xFF)
|
|
||||||
|
|
||||||
* CONTENU STRUCTURE
|
* CONTENU STRUCTURE
|
||||||
- <header> objet de type <BMPHeader>
|
- <header> objet de type <BMPHeader>
|
||||||
|
@ -106,8 +104,8 @@ Classes:
|
||||||
parse(binFile=""):
|
parse(binFile=""):
|
||||||
Définit les attributs à partir de <binData> ou de l'argument <binFile> si défini
|
Définit les attributs à partir de <binData> ou de l'argument <binFile> si défini
|
||||||
|
|
||||||
unparse(header="", content=""):
|
unparse():
|
||||||
Définit <binData> à partir d'un <header> et d'un <content>
|
Définit <binData> à partir des attributs <BMPHeader> et <BMPContent>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -69,11 +69,6 @@ class BMPHeader:
|
||||||
self.intData.append( ord(byte) )
|
self.intData.append( ord(byte) )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# fonction qui créer <self.binData> à partir des attributs
|
# fonction qui créer <self.binData> à partir des attributs
|
||||||
def unparse(self):
|
def unparse(self):
|
||||||
|
|
||||||
|
@ -213,7 +208,7 @@ class BMPContent:
|
||||||
# human-readable data
|
# human-readable data
|
||||||
self.intData = []
|
self.intData = []
|
||||||
for byte in self.binData:
|
for byte in self.binData:
|
||||||
self.intData.append( ord( byte ) )
|
self.intData.append( ord( byte ) )
|
||||||
|
|
||||||
|
|
||||||
# unparse une map de pixels en binaire
|
# unparse une map de pixels en binaire
|
||||||
|
@ -224,12 +219,17 @@ class BMPContent:
|
||||||
width = len( map[0] ) # nb de colonnes = taille des lignes de la map
|
width = len( map[0] ) # nb de colonnes = taille des lignes de la map
|
||||||
padding = ( 4 - width*3 % 4 ) % 4 # padding de bourrage de lignes
|
padding = ( 4 - width*3 % 4 ) % 4 # padding de bourrage de lignes
|
||||||
|
|
||||||
self.bin = ""
|
|
||||||
|
self.binData = ""
|
||||||
for line in self.map[::-1]:
|
for line in self.map[::-1]:
|
||||||
for pixel in line:
|
for pixel in line:
|
||||||
self.bin += chr(pixel.b) + chr(pixel.g) + chr(pixel.r)
|
self.binData += chr(pixel.b) + chr(pixel.g) + chr(pixel.r)
|
||||||
for zero in range(0, padding):
|
for zero in range(0, padding):
|
||||||
self.bin += chr(0)
|
self.binData += chr(0)
|
||||||
|
|
||||||
|
self.intData = []
|
||||||
|
for byte in self.binData:
|
||||||
|
self.intData.append( ord(byte) )
|
||||||
|
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
|
@ -258,11 +258,9 @@ class BMPFile:
|
||||||
# human-readable data
|
# human-readable data
|
||||||
self.binData = binFile
|
self.binData = binFile
|
||||||
self.intData = []
|
self.intData = []
|
||||||
self.hexData = []
|
|
||||||
|
|
||||||
for byte in binFile:
|
for byte in binFile:
|
||||||
self.intData.append( ord(byte) )
|
self.intData.append( ord(byte) )
|
||||||
self.hexData.append( hex( ord(byte) ) )
|
|
||||||
|
|
||||||
headerSize = 54
|
headerSize = 54
|
||||||
|
|
||||||
|
@ -274,7 +272,28 @@ class BMPFile:
|
||||||
self.content = BMPContent()
|
self.content = BMPContent()
|
||||||
self.content.parse( self.binData[self.header.offset:], self.header )
|
self.content.parse( self.binData[self.header.offset:], self.header )
|
||||||
|
|
||||||
|
# création de la pallette (header complémentaire=définition des couleurs+codage)
|
||||||
|
self.binPalette = self.binData[54:self.header.offset]
|
||||||
|
self.intPalette = []
|
||||||
|
for byte in self.binPalette:
|
||||||
|
self.intPalette.append( ord(byte) )
|
||||||
|
|
||||||
# unparse à partir d'un <BMPHeader> et d'un <BMPContent>
|
# unparse à partir d'un <BMPHeader> et d'un <BMPContent>
|
||||||
def unparse(self):
|
def unparse(self):
|
||||||
print "To Do !"
|
# on définit la palette par défaut
|
||||||
print "implement unparse function"
|
self.intPalette = [66, 71, 82, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||||
|
|
||||||
|
self.binPalette = ""
|
||||||
|
for byte in self.intPalette:
|
||||||
|
self.binPalette += chr(byte)
|
||||||
|
|
||||||
|
# on déparse les classes utilisées
|
||||||
|
self.content.unparse( self.content.map )
|
||||||
|
self.header.unparse()
|
||||||
|
|
||||||
|
# on enregistre le contenu brut binaire du fichier complet
|
||||||
|
self.binData = "%s%s%s" % (self.header.binData, self.binPalette, self.content.binData)
|
||||||
|
|
||||||
|
self.intData = []
|
||||||
|
for byte in self.binData:
|
||||||
|
self.intData.append( ord(byte) )
|
Binary file not shown.
|
@ -1,50 +0,0 @@
|
||||||
# ~*~ encoding: utf-8 ~*~ #
|
|
||||||
###########################
|
|
||||||
# TRAITEMENT D'IMAGES #
|
|
||||||
###########################
|
|
||||||
|
|
||||||
# classes
|
|
||||||
from classes import *
|
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
# lecture du fichier
|
|
||||||
binFile = ""
|
|
||||||
with open( sys.argv[1] ) as file:
|
|
||||||
for byte in file.read():
|
|
||||||
binFile += byte;
|
|
||||||
|
|
||||||
img = BMPFile()
|
|
||||||
img.parse( binFile );
|
|
||||||
|
|
||||||
|
|
||||||
### print header human-readable data ###
|
|
||||||
#print img.header.info()
|
|
||||||
|
|
||||||
### print file human-readable data ###
|
|
||||||
#print img.readableData
|
|
||||||
|
|
||||||
### print header human-readable data ###
|
|
||||||
#print img.header.readableData
|
|
||||||
|
|
||||||
### print content human-readable data ###
|
|
||||||
#print img.content.readableData
|
|
||||||
|
|
||||||
|
|
||||||
#print img.header.binData + img.content.binData
|
|
||||||
|
|
||||||
img.content.unparse( img.content.map )
|
|
||||||
img.header.unparse()
|
|
||||||
|
|
||||||
|
|
||||||
print img.header.binData + img.content.binData
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#print img.hexData
|
|
||||||
|
|
||||||
|
|
||||||
#for line in img.content.map:
|
|
||||||
# for pixel in line:
|
|
||||||
# print "rgb(%s, %s, %s)" % (pixel.r, pixel.g, pixel.b)
|
|
||||||
# print
|
|
Loading…
Reference in New Issue