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