Example #1
0
    def wrapper(self, *args, **kwargs):
        # Setup variables
        in_data_len = len(self._data)
        in_data_p = ffi.new("unsigned char[]", in_data_len)
        inbuf = ffi.buffer(in_data_p, in_data_len)
        inbuf[:] = self._data

        out_bufs = ffi.gc(ffi.new("unsigned char**"), _turbojpeg_cleanup)
        out_bufs[0] = ffi.NULL
        out_sizes = ffi.new("unsigned long*")

        tjhandle = ffi.gc(lib.tjInitTransform(), lib.tjDestroy)

        # Call the wrapped function with the transformoption struct
        transformoption = func(self, *args, **kwargs)

        # Execute transformation
        rv = lib.tjTransform(tjhandle, in_data_p, in_data_len, 1,
                             out_bufs, out_sizes, transformoption, 0)
        if rv < 0:
            raise Exception("Transformation failed: {0}"
                            .format(ffi.string(lib.tjGetErrorStr())))

        _weak_keydict[out_bufs[0]] = out_bufs
        return bytearray(ffi.buffer(out_bufs[0], out_sizes[0])[:])
Example #2
0
    def wrapper(self, *args, **kwargs):
        # Setup variables
        in_data_len = len(self._data)
        in_data_p = ffi.new("unsigned char[]", in_data_len)
        inbuf = ffi.buffer(in_data_p, in_data_len)
        inbuf[:] = self._data

        out_bufs = ffi.gc(ffi.new("unsigned char**"), _turbojpeg_cleanup)
        out_bufs[0] = ffi.NULL
        out_sizes = ffi.new("unsigned long*")

        tjhandle = ffi.gc(lib.tjInitTransform(), lib.tjDestroy)

        # Call the wrapped function with the transformoption struct
        transformoption = func(self, *args, **kwargs)

        # Execute transformation
        rv = lib.tjTransform(tjhandle, in_data_p, in_data_len, 1, out_bufs,
                             out_sizes, transformoption, 0)
        if rv < 0:
            raise Exception("Transformation failed: {0}".format(
                ffi.string(lib.tjGetErrorStr())))

        _weak_keydict[out_bufs[0]] = out_bufs
        return bytearray(ffi.buffer(out_bufs[0], out_sizes[0])[:])
Example #3
0
 def get_dimensions(self):
     width = ffi.new("int*")
     height = ffi.new("int*")
     in_data_len = len(self._data)
     in_data_p = ffi.new("unsigned char[]", in_data_len)
     inbuf = ffi.buffer(in_data_p, in_data_len)
     inbuf[:] = self._data
     img = ffi.gc(lib.epeg_memory_open(in_data_p, in_data_len),
                  lib.epeg_close)
     lib.epeg_size_get(img, width, height)
     return (width[0], height[0])
Example #4
0
 def get_dimensions(self):
     width = ffi.new("int*")
     height = ffi.new("int*")
     in_data_len = len(self._data)
     in_data_p = ffi.new("unsigned char[]", in_data_len)
     inbuf = ffi.buffer(in_data_p, in_data_len)
     inbuf[:] = self._data
     img = ffi.gc(lib.epeg_memory_open(in_data_p, in_data_len),
                  lib.epeg_close)
     lib.epeg_size_get(img, width, height)
     return (width[0], height[0])
Example #5
0
    def scale(self, width, height, quality=75):
        in_data_len = len(self._data)
        in_data_p = ffi.new("unsigned char[]", in_data_len)
        inbuf = ffi.buffer(in_data_p, in_data_len)
        inbuf[:] = self._data
        img = ffi.gc(lib.epeg_memory_open(in_data_p, in_data_len),
                     lib.epeg_close)
        lib.epeg_decode_size_set(img, width, height)
        lib.epeg_quality_set(img, quality)

        pdata = ffi.gc(ffi.new("unsigned char **"), _epeg_free_buffer)
        psize = ffi.new("int*")
        lib.epeg_memory_output_set(img, pdata, psize)
        lib.epeg_encode(img)

        _weak_keydict[pdata[0]] = pdata
        return bytearray(ffi.buffer(pdata[0], psize[0])[:])
Example #6
0
    def scale(self, width, height, quality=75):
        in_data_len = len(self._data)
        in_data_p = ffi.new("unsigned char[]", in_data_len)
        inbuf = ffi.buffer(in_data_p, in_data_len)
        inbuf[:] = self._data
        img = ffi.gc(lib.epeg_memory_open(in_data_p, in_data_len),
                     lib.epeg_close)
        lib.epeg_decode_size_set(img, width, height)
        lib.epeg_quality_set(img, quality)

        pdata = ffi.gc(ffi.new("unsigned char **"), _epeg_free_buffer)
        psize = ffi.new("int*")
        lib.epeg_memory_output_set(img, pdata, psize)
        lib.epeg_encode(img)

        _weak_keydict[pdata[0]] = pdata
        return bytearray(ffi.buffer(pdata[0], psize[0])[:])
Example #7
0
 def crop(self, x, y, width, height):
     options = self._get_transformoptions()
     options.r = ffi.new("tjregion*")[0]
     options.r.w = width
     options.r.h = height
     options.r.x = x
     options.r.y = y
     options.options = lib.TJXOPT_CROP
     return options
Example #8
0
 def crop(self, x, y, width, height):
     options = self._get_transformoptions()
     options.r = ffi.new("tjregion*")[0]
     options.r.w = width
     options.r.h = height
     options.r.x = x
     options.r.y = y
     options.options = lib.TJXOPT_CROP
     return options
Example #9
0
 def _get_transformoptions(self, perfect=False, trim=False):
     # Initialize jpeg_transform_info struct
     options = ffi.new("tjtransform*")
     options.op = lib.TJXOP_NONE
     options.options = 0
     if perfect:
         options.options |= lib.TJXOPT_PERFECT
     if trim:
         options.options |= lib.TJXOPT_TRIM
     return options
Example #10
0
 def _get_transformoptions(self, perfect=False, trim=False):
     # Initialize jpeg_transform_info struct
     options = ffi.new("tjtransform*")
     options.op = lib.TJXOP_NONE
     options.options = 0
     if perfect:
         options.options |= lib.TJXOPT_PERFECT
     if trim:
         options.options |= lib.TJXOPT_TRIM
     return options