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:
xdrm-brackets 2015-09-08 21:17:00 +02:00
parent c4ae166f8f
commit 9a9101ed77
5 changed files with 65 additions and 90 deletions

View File

@ -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

View File

@ -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>

View File

@ -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) )

BIN
code/classes.pyc Normal file

Binary file not shown.

View File

@ -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