예제 #1
0
        def topic(self):
            engine = MockEngine(size=IMAGE_SIZE)
            json = JSONEngine(engine=engine, path=IMAGE_PATH)

            json.crop(100, 100, 200, 150)

            return loads(json.read('jpg', 100))
예제 #2
0
        def topic(self):
            engine = MockEngine(size=IMAGE_SIZE)
            json = JSONEngine(engine=engine, path=IMAGE_PATH)

            json.crop(100, 100, 200, 150)

            return loads(json.read('jpg', 100))
예제 #3
0
        def topic(self):
            engine = MockEngine(size=IMAGE_SIZE)
            json = JSONEngine(engine=engine, path=IMAGE_PATH, callback_name="callback")

            jsonp = json.read('jpg', 100)
            match = re.match('^callback\((.+)\);', jsonp)
            return match
예제 #4
0
        def topic(self):
            engine = MockEngine(size=IMAGE_SIZE)
            json = JSONEngine(engine=engine, path=IMAGE_PATH, callback_name="callback")

            jsonp = json.read('jpg', 100)
            match = re.match('^callback\((.+)\);', jsonp)
            return match
예제 #5
0
        def topic(self):
            engine = MockEngine(size=IMAGE_SIZE)
            json = JSONEngine(engine=engine, path=IMAGE_PATH)

            json.focus([FocalPoint(100, 100), FocalPoint(200, 200)])

            return loads(json.read('jpg', 100))
예제 #6
0
        def topic(self):
            engine = MockEngine(size=IMAGE_SIZE)
            json = JSONEngine(engine=engine, path=IMAGE_PATH)

            json.focus([
                FocalPoint(100, 100),
                FocalPoint(200, 200)
            ])

            return loads(json.read('jpg', 100))
예제 #7
0
            def transform():
                self.normalize_crops(normalized, req, engine)

                if req.meta:
                    self.context.request.engine = JSONEngine(engine, req.image_url, req.meta_callback)

                after_transform_cb = functools.partial(self.after_transform, self.context)
                Transformer(self.context).transform(after_transform_cb)
예제 #8
0
        def transform():
            self.normalize_crops(normalized, req, engine)

            if req.meta:
                self.context.transformer.engine = \
                    self.context.request.engine = \
                    JSONEngine(engine, req.image_url, req.meta_callback)

            self.context.transformer.transform(self.after_transform)
예제 #9
0
        def topic(self):
            engine = MockEngine(size=IMAGE_SIZE)
            json = JSONEngine(engine=engine, path=IMAGE_PATH)

            json.flip_vertically()
            json.flip_horizontally()

            return loads(json.read('jpg', 100))
예제 #10
0
        def topic(self):
            engine = MockEngine(size=IMAGE_SIZE)
            json = JSONEngine(engine=engine, path=IMAGE_PATH)

            json.flip_vertically()
            json.flip_horizontally()

            return loads(json.read('jpg', 100))
예제 #11
0
        def callback(buffer):
            if buffer is None:
                self._error(404)
                return

            context = dict(loader=self.loader,
                           engine=self.engine,
                           storage=self.storage,
                           buffer=buffer,
                           should_crop=should_crop,
                           crop_left=crop_left,
                           crop_top=crop_top,
                           crop_right=crop_right,
                           crop_bottom=crop_bottom,
                           fit_in=fit_in,
                           should_flip_horizontal=horizontal_flip,
                           width=width,
                           should_flip_vertical=vertical_flip,
                           height=height,
                           halign=halign,
                           valign=valign,
                           extension=extension,
                           focal_points=[])

            self.engine.load(buffer, extension)

            if meta:
                context['engine'] = JSONEngine(self.engine, image)

            if self.detectors and should_be_smart:
                with tempfile.NamedTemporaryFile(suffix='.jpg') as temp_file:
                    jpg_buffer = buffer if extension in (
                        '.jpg', '.jpeg') else self.engine.read('.jpg')
                    temp_file.write(jpg_buffer)
                    temp_file.seek(0)
                    context['file'] = temp_file.name
                    self.detectors[0](index=0,
                                      detectors=self.detectors).detect(context)

            Transformer(context).transform()

            content_type = "application/json" if meta else CONTENT_TYPE[
                context['extension']]
            self.set_header('Content-Type', content_type)

            results = context['engine'].read(context['extension'])

            self.write(results)
            self.finish()
예제 #12
0
파일: __init__.py 프로젝트: amumu/thumbor
        def callback(normalized, buffer=None, engine=None):
            req = self.context.request

            if engine is None:
                if buffer is None:
                    self._error(404)
                    return

                engine = self.context.modules.engine
                engine.load(buffer, req.extension)

            new_crops = None
            if normalized and req.should_crop:
                crop_left = req.crop['left']
                crop_top = req.crop['top']
                crop_right = req.crop['right']
                crop_bottom = req.crop['bottom']

                actual_width, actual_height = engine.size

                if not req.width and not req.height:
                    actual_width = engine.size[0]
                    actual_height = engine.size[1]
                elif req.width:
                    actual_height = engine.get_proportional_height(
                        engine.size[0])
                elif req.height:
                    actual_width = engine.get_proportional_width(
                        engine.size[1])

                new_crops = self.translate_crop_coordinates(
                    engine.source_width, engine.source_height, actual_width,
                    actual_height, crop_left, crop_top, crop_right,
                    crop_bottom)
                req.crop['left'] = new_crops[0]
                req.crop['top'] = new_crops[1]
                req.crop['right'] = new_crops[2]
                req.crop['bottom'] = new_crops[3]

            if req.meta:
                self.context.modules.engine = JSONEngine(
                    engine, req.image_url, req.meta_callback)

            after_transform_cb = functools.partial(self.after_transform,
                                                   self.context)
            Transformer(self.context).transform(after_transform_cb)
예제 #13
0
        def callback(normalized, buffer=None, engine=None):
            req = self.context.request

            if engine is None:
                if buffer is None:
                    self._error(404)
                    return

                engine = self.context.modules.engine
                engine.load(buffer, req.extension)

            self.normalize_crops(normalized, req, engine)

            if req.meta:
                self.context.modules.engine = JSONEngine(engine, req.image_url, req.meta_callback)

            after_transform_cb = functools.partial(self.after_transform, self.context)
            Transformer(self.context).transform(after_transform_cb)
예제 #14
0
    async def get_image(self):
        """
        This function is called after the PRE_LOAD filters have been applied.
        It applies the AFTER_LOAD filters on the result, then crops the image.
        """
        try:
            result = await self._fetch(self.context.request.image_url)

            if not result.successful:
                if result.loader_error == LoaderResult.ERROR_NOT_FOUND:
                    self._error(404)
                    return

                if result.loader_error == LoaderResult.ERROR_UPSTREAM:
                    # Return a Bad Gateway status if the error
                    # came from upstream
                    self._error(502)
                    return

                if result.loader_error == LoaderResult.ERROR_TIMEOUT:
                    # Return a Gateway Timeout status if upstream
                    # timed out (i.e. 599)
                    self._error(504)
                    return

                if isinstance(result.loader_error, int):
                    self._error(result.loader_error)
                    return

                if (hasattr(result, "engine_error") and result.engine_error
                        == EngineResult.COULD_NOT_LOAD_IMAGE):
                    self._error(400)
                    return

                self._error(500)
                return

        except Exception as error:
            msg = (
                "[BaseHandler] get_image failed for url `{url}`. error: `{error}`"
            ).format(url=self.context.request.image_url, error=error)

            self.log_exception(*sys.exc_info())

            if "cannot identify image file" in str(error):
                logger.warning(msg)
                self._error(400)
            else:
                logger.error(msg)
                self._error(500)
            return

        normalized = result.normalized
        buffer = result.buffer
        engine = result.engine

        req = self.context.request

        if engine is None:
            if buffer is None:
                self._error(504)
                return

            engine = self.context.request.engine
            try:
                engine.load(buffer, self.context.request.extension)
            except Exception as error:
                logger.exception("Loading image failed with %s", error)
                self._error(504)
                return

        self.context.transformer = Transformer(self.context)

        await self.filters_runner.apply_filters(
            thumbor.filters.PHASE_AFTER_LOAD)
        self.normalize_crops(normalized, req, engine)

        if req.meta:
            self.context.transformer.engine = self.context.request.engine = JSONEngine(
                engine, req.image_url, req.meta_callback)

        await self.context.transformer.transform()
        await self.after_transform()
예제 #15
0
        def topic(self):
            engine = MockEngine(size=IMAGE_SIZE)
            json = JSONEngine(engine=engine, path=IMAGE_PATH)

            return json