Beispiel #1
0
 def _parasitesEncode_(self):
     """
     encode list of parasites
     """
     io=IO()
     for parasite in self.parasites:
         io.addBytes(parasite.toBytes())
     return io.data
 def toBytes(self):
     """
     encode this object to a byte array
     """
     io = IO()
     io.addBytes(self.brush.toBytes())
     io.addBytes(self.pattern.toBytes())
     return io.data
Beispiel #3
0
 def _propertiesEncode_(self):
     """
     encode a list of properties
     """
     io=IO()
     for propertyType in range(1,self.PROP_NUM_PROPS):
         moData=self._propertyEncode_(propertyType)
         if moData:
             io.addBytes(moData)
     return io.data
 def toBytes(self):
     """
     encode to binary data
     """
     io=IO(boolSize=32)
     io.u32=self.strokeType
     io.bool=self.closedShape
     io.u32=self.numFloatsPerPoint
     io.u32=self.numPoints
     for gp in self.points:
         io.addBytes(gp.toBytes())
     return io.data
 def toBytes(self)->bytes:
     """
     encode this object to a byte buffer
     """
     io=IO()
     io.u32=self.width
     io.u32=self.height
     io.sz754=self.name
     io.addBytes(self._propertiesEncode_())
     ih=self._imageHierarchyPtr
     if ih is None:
         ih=0
     io.addBytes(self._pointerEncode_(ih))
     return io.data
 def toBytes(self)->bytearray:
     """
     encode this object to a byte buffer
     """
     dataIO=IO()
     io=IO()
     io.u32=self.width
     io.u32=self.height
     tiles=self.tiles
     if tiles is not None:
         dataIndex=io.index+self._POINTER_SIZE_*(len(tiles)+1)
         for tile in tiles:
             io.addBytes(self._pointerEncode_(dataIndex+dataIO.index))
             data=tile.tobytes()
             if self.doc.compression==0: # none
                 pass
             elif self.doc.compression==1: # RLE
                 data=self._encodeRLE(data,self.bpp)
             elif self.doc.compression==2: # zip
                 data=zlib.compress(data)
             else:
                 raise Exception('ERR: unsupported compression mode '+str(self.doc.compression))
             dataIO.addBytes(data)
     io.addBytes(self._pointerEncode_(0))
     io.addBytes(dataIO.data)
     return io.data
 def toBytes(self):
     """
     encode to binary data
     """
     io=IO(boolSize=32)
     io.sz754=self.name
     io.u32=self.uniqueId
     io.bool=self.visible
     io.bool=self.linked
     io.u32=len(self.parasites)
     io.u32=len(self.strokes)
     for p in self.parasites:
         io.addBytes(p.toBytes())
     for gs in self.strokes:
         io.addBytes(gs.toBytes())
     return io.data
 def toBytes(self) -> bytearray:
     """
     encode this object to a byte array
     """
     io = IO()
     io.textLine = self.name
     # add the second line of data
     secondLine = [str(len(self.brushes))]
     for k, v in self.params.items():
         secondLine.append(k + ':' + str(v))
     secondLine = ' '.join(secondLine)
     io.textLine = secondLine
     # add the brushes
     for brush in self.brushes:
         #TODO: currently broken.  This results in header insterted twice for some reason!
         io.addBytes(brush.toBytes())
     return io.data
 def toBytes(self) -> bytes:
     """
     encode to a byte array
     """
     io = IO()
     io.addBytes("gimp xcf ")
     io.addBytes(str(self.version) + '\0')
     io.u32 = self.width
     io.u32 = self.height
     io.u32 = self.baseColorMode
     if self.precision is None:
         self.precision = Precision()
     self.precision.encode(self.version, io)
     io.addBytes(self._propertiesEncode_())
     dataAreaIdx = io.index + self._POINTER_SIZE_ * (len(self.layers) +
                                                     len(self.channels))
     dataAreaIo = IO()
     for layer in self.layers:
         io.pointer = dataAreaIdx + dataAreaIo.index
         dataAreaIo.addBytes(layer.toBytes())
     for channel in self.channels:
         io.pointer = dataAreaIdx + dataAreaIo.index
         dataAreaIo.addBytes(channel.toBytes())
     return io.data
 def toBytes(self)->bytearray:
     """
     encode this object to a byte buffer
     """
     dataIO=IO()
     io=IO()
     io.u32=self.width
     io.u32=self.height
     io.u32=self.bpp
     levels=self.levels
     if levels is not None:
         dataIndex=io.index+self._POINTER_SIZE_*(len(levels)+1)
         for level in levels:
             io.addBytes(self._pointerEncode_(dataIndex+io.index))
             dataIO.addBytes(level.toBytes())
     io.addBytes(self._pointerEncode_(0))
     io.addBytes(dataIO.data)
     return io.data
 def toBytes(self) -> bytearray:
     """
     encode to a byte buffer
     """
     io = IO()
     io.u32 = 24 + len(self.name)
     io.u32 = self.version
     io.u32 = self.width
     io.u32 = self.height
     io.u32 = len(self.image.mode)
     io.addBytes('GPAT')
     io.addBytes(self.name.encode('utf-8'))
     if self._rawImage is None:
         rawImage = self.image.tobytes(encoder_name='raw')
     else:
         rawImage = self._rawImage
     io.addBytes(rawImage)
     return io.data
 def toBytes(self):
     """
     encode to byte array
     """
     dataAreaIO = IO()
     io = IO()
     io.u32 = self.width
     io.u32 = self.height
     io.u32 = self.colorMode
     io.sz754 = self.name
     dataAreaIndex = io.index + self._POINTER_SIZE_ * 2
     io.addBytes(self._pointerEncode_(dataAreaIndex))
     dataAreaIO.addBytes(self._propertiesEncode_())
     io.addBytes(self._pointerEncode_(dataAreaIndex))
     if self.mask is not None:
         dataAreaIO.addBytes(self.mask.toBytes())
     io.addBytes(self._pointerEncode_(dataAreaIndex + dataAreaIO.index))
     io.addBytes(dataAreaIO)
     return io.data
Beispiel #13
0
    def _propertyEncode_(self,propertyType):
        """
        encode a single property

        If the property is the same as the default, or not specified, returns empty array
        """
        io=IO(boolSize=32)
        if propertyType==self.PROP_COLORMAP:
            if self.colorMap is not None and self.colorMap:
                io.u32=self.PROP_COLORMAP
                io.addBytes(self._colormapEncode_())
        elif propertyType==self.PROP_ACTIVE_LAYER:
            if self.selected is not None and self.selected:
                io.u32=self.PROP_ACTIVE_LAYER
        elif propertyType==self.PROP_ACTIVE_CHANNEL:
            if self.selected is not None and self.selected:
                io.u32=self.PROP_ACTIVE_LAYER
        elif propertyType==self.PROP_SELECTION:
            if self.isSelection is not None and self.isSelection:
                io.u32=self.PROP_SELECTION
        elif propertyType==self.PROP_FLOATING_SELECTION:
            if self.selectionAttachedTo is not None:
                io.u32=self.PROP_FLOATING_SELECTION
                io.u32=self.selectionAttachedTo
        elif propertyType==self.PROP_OPACITY:
            if self.opacity is not None and not isinstance(self.opacity,float):
                io.u32=self.PROP_OPACITY
                io.u32=self.opacity
        elif propertyType==self.PROP_MODE:
            if self.blendMode is not None:
                io.u32=self.PROP_MODE
                io.u32=self.blendMode
        elif propertyType==self.PROP_VISIBLE:
            if self.visible is not None and self.visible:
                io.u32=self.PROP_VISIBLE
        elif propertyType==self.PROP_LINKED:
            if self.isLinked is not None and self.isLinked:
                io.u32=self.PROP_LINKED
                io.bool=self.isLinked
        elif propertyType==self.PROP_LOCK_ALPHA:
            if self.lockAlpha is not None and self.lockAlpha:
                io.u32=self.PROP_LOCK_ALPHA
                io.bool=self.lockAlpha
        elif propertyType==self.PROP_APPLY_MASK:
            if self.applyMask is not None:
                io.u32=self.PROP_APPLY_MASK
                io.bool=self.applyMask
        elif propertyType==self.PROP_EDIT_MASK:
            if self.editingMask is not None and self.editingMask:
                io.u32=self.PROP_EDIT_MASK
                io.bool=self.editingMask
        elif propertyType==self.PROP_SHOW_MASK:
            if self.showMask is not None and self.showMask:
                io.u32=self.PROP_SHOW_MASK
                io.bool=self.showMask
        elif propertyType==self.PROP_SHOW_MASKED:
            if self.showMasked is not None:
                io.u32=self.PROP_SHOW_MASKED
                io.bool=self.showMasked
        elif propertyType==self.PROP_OFFSETS:
            if self.xOffset is not None and self.yOffset is not None:
                io.u32=self.PROP_OFFSETS
                io.i32=self.xOffset
                io.i32=self.yOffset
        elif propertyType==self.PROP_COLOR:
            if self.color is not None and not self.isFloatColor(self.color):
                io.u32=self.PROP_COLOR
                io.byte=self.color[0]
                io.byte=self.color[1]
                io.byte=self.color[2]
        elif propertyType==self.PROP_COMPRESSION:
            if self.compression is not None:
                io.u32=self.PROP_COMPRESSION
                io.u32=self.compression
        elif propertyType==self.PROP_GUIDES:
            if self.guidelines is not None and self.guidelines:
                io.u32=self.PROP_GUIDES
                io.addBytes(self._guidelinesEncode_())
        elif propertyType==self.PROP_RESOLUTION:
            if self.horizontalResolution is not None and self.verticalResolution is not None:
                io.u32=self.PROP_RESOLUTION
                io.u32=self.horizontalResolution
                io.i32=self.verticalResolution
        elif propertyType==self.PROP_TATTOO:
            if self.uniqueId is not None:
                io.u32=int(self.uniqueId,16)
        elif propertyType==self.PROP_PARASITES:
            if self.parasites is not None and self.parasites:
                io.u32=self.PROP_PARASITES
                io.addBytes(self._parasitesEncode_())
        elif propertyType==self.PROP_UNIT:
            if self.units is not None:
                io.u32=self.PROP_UNIT
                io.u32=self.units
        elif propertyType==self.PROP_PATHS:
            if self.paths is not None and self.paths:
                io.u32=self.PROP_PATHS
                io.u32=len(self.paths)
                for path in self.paths:
                    io.addBytes(self._pathEncode_(path))
        elif propertyType==self.PROP_USER_UNIT:
            if self.userUnits is not None:
                io.u32=self.PROP_USER_UNIT
                io.addBytes(self._userUnitsEncode_())
        elif propertyType==self.PROP_VECTORS:
            if self.vectors is not None and self.vectors:
                io.u32=self.PROP_VECTORS
                io.addBytes(self._vectorsEncode_())
        elif propertyType==self.PROP_TEXT_LAYER_FLAGS:
            if self.textLayerFlags is not None:
                io.u32=self.PROP_TEXT_LAYER_FLAGS
                io.u32=self.textLayerFlags
        elif propertyType==self.PROP_OLD_SAMPLE_POINTS:
            pass
        elif propertyType==self.PROP_LOCK_CONTENT:
            if self.locked is not None and self.locked:
                io.u32=self.PROP_LOCK_CONTENT
                io.bool=self.locked
        elif propertyType==self.PROP_GROUP_ITEM:
            if self.isGroup is not None and self.isGroup:
                io.u32=self.PROP_GROUP_ITEM
        elif propertyType==self.PROP_ITEM_PATH:
            if self.itemPath is not None:
                io.u32=self.PROP_ITEM_PATH
                io.addBytes(self._itemPathEncode_())
        elif propertyType==self.PROP_GROUP_ITEM_FLAGS:
            if self.groupItemFlags is not None:
                io.u32=self.PROP_GROUP_ITEM_FLAGS
                io.u32=self.groupItemFlags
        elif propertyType==self.PROP_LOCK_POSITION:
            if self.positionLocked is not None and self.positionLocked:
                io.u32=self.PROP_LOCK_POSITION
                io.bool=self.positionLocked
        elif propertyType==self.PROP_FLOAT_OPACITY:
            if self.opacity is not None and isinstance(self.opacity,float):
                io.u32=self.PROP_FLOAT_OPACITY
                io.float32=self.opacity
        elif propertyType==self.PROP_COLOR_TAG:
            if self.colorTag is not None:
                io.u32=self.PROP_COLOR_TAG
                io.u32=self.colorTag
        elif propertyType==self.PROP_COMPOSITE_MODE:
            if self.compositeMode is not None:
                io.u32=self.PROP_COMPOSITE_MODE
                io.i32=self.compositeMode
        elif propertyType==self.PROP_COMPOSITE_SPACE:
            if self.compositeSpace is not None:
                io.u32=self.PROP_COMPOSITE_SPACE
                io.i32=self.compositeSpace
        elif propertyType==self.PROP_BLEND_SPACE:
            if self.blendSpace is not None:
                io.u32=self.PROP_BLEND_SPACE
                io.u32=self.blendSpace
        elif propertyType==self.PROP_FLOAT_COLOR:
            if self.color is not None and self.isFloatColor(self.color):
                io.u32=self.PROP_FLOAT_COLOR
                io.float32=self.color[0]
                io.float32=self.color[1]
                io.float32=self.color[2]
        elif propertyType==self.PROP_SAMPLE_POINTS:
            if self.samplePoints is not None and self.samplePoints:
                io.u32=self.PROP_SAMPLE_POINTS
                io.addBytes(self._samplePointsEncode_())
        else:
            raise Exception('Unknown property id '+str(propertyType))
        return io.data