Ejemplo n.º 1
0
    def compress(self):
        print 'Action: compress'

        bmpImage = BMPImage()
        try:
            bmpImage.load(self.__input)
        except IOError as e:
            print 'IO Error: ' + str(e)
            return

        width, height = bmpImage.getDimensions()
        data = bmpImage.getRawData()

        color = RgbColorModel()
        y, cb, cr = zip(*map(color.getYCbCr, data))

        yBlockSize = 8
        cbBlockSize = 16
        crBlockSize = 16

        y = self.__slice(y, width, height, yBlockSize)
        cb = self.__slice(cb, width, height, cbBlockSize)
        cr = self.__slice(cr, width, height, crBlockSize)

        transform = WalshHadamardTransform()
        spectralY = transform.transformSequence(y)
        spectralCb = transform.transformSequence(cb)
        spectralCr = transform.transformSequence(cr)

        customizableImage = CustomizableImage()
        customizableImage.setDimensions(width, height)
        customizableImage.setDescriptions(
            (yBlockSize, 4, len(spectralY)),
            (cbBlockSize, 4, len(spectralCb)),
            (crBlockSize, 4, len(spectralCr))
        )
        customizableImage.setData(spectralY, spectralCb, spectralCr)
        customizableImage.save(self.__output)
Ejemplo n.º 2
0
    def compress(self):
        print 'Action: compress'

        bmp_image = BMPImage()
        try:
            bmp_image.load(self.__input)
        except IOError as e:
            print 'IO Error: ' + str(e)
            return

        width, height = bmp_image.get_dimensions()
        data = bmp_image.get_raw_data()

        color = RgbColorModel()
        y, cb, cr = zip(*map(color.get_y_cb_cr, data))

        y_block_size = 8
        cb_block_size = 16
        cr_block_size = 16

        y = self._slice(y, width, height, y_block_size)
        cb = self._slice(cb, width, height, cb_block_size)
        cr = self._slice(cr, width, height, cr_block_size)

        transform = WalshHadamardTransform(self.__coeff_removal)
        spectral_y = transform.transform_sequence(y)
        spectral_cb = transform.transform_sequence(cb)
        spectral_cr = transform.transform_sequence(cr)

        customizable_image = CustomizableImage()
        customizable_image.set_dimensions(width, height)
        customizable_image.set_descriptions(
            (y_block_size, 4, len(spectral_y)),
            (cb_block_size, 4, len(spectral_cb)),
            (cr_block_size, 4, len(spectral_cr)))
        customizable_image.set_data(spectral_y, spectral_cb, spectral_cr)
        customizable_image.save(self.__output)