Example #1
0
    def make_response(self, image, size, mode, filename=None, *args, **kwargs):
        """
        :param image: image as bytes
        :param size: requested maximum width/height size
        :param mode: one of 'scale', 'fit' or 'crop'
        :param filename: filename
        """
        try:
            fmt = get_format(image)
        except OSError:
            # not a known image file
            raise NotFound()

        self.content_type = "image/png" if fmt == "PNG" else "image/jpeg"
        ext = "." + str(fmt.lower())

        if not filename:
            filename = "image"
        if not filename.lower().endswith(ext):
            filename += ext
        self.filename = filename

        if size:
            image = resize(image, size, size, mode=mode)
            if mode == CROP:
                assert get_size(image) == (size, size)
        else:
            image = image.read()

        return make_response(image)
Example #2
0
    def make_response(self, image, size, mode, filename=None, *args, **kwargs):
        """
        :param image: image as bytes
        :param size: requested maximum width/height size
        :param mode: one of 'scale', 'fit' or 'crop'
        :param filename: filename
        """
        try:
            fmt = get_format(image)
        except IOError:
            # not a known image file
            raise NotFound()

        self.content_type = "image/png" if fmt == "PNG" else "image/jpeg"
        ext = "." + str(fmt.lower())

        if not filename:
            filename = "image"
        if not filename.lower().endswith(ext):
            filename += ext
        self.filename = filename

        if size:
            image = resize(image, size, size, mode=mode)
            if mode == CROP:
                assert get_size(image) == (size, size)
        else:
            image = image.read()

        return make_response(image)
Example #3
0
    def make_response(self, image, size, mode, *args, **kwargs):
        """
        :param image: image as bytes
        :param s: requested maximum width/height size
        """
        from abilian.services.image import resize, get_format

        try:
            fmt = get_format(image)
        except IOError:
            #  not a known image file
            raise NotFound()

        self.content_type = u'image/png' if fmt == 'PNG' else u'image/jpeg'
        ext = u'.' + text_type(fmt.lower())

        filename = kwargs.get('filename')
        if not filename:
            filename = u'image'
        if not filename.lower().endswith(ext):
            filename += ext
        self.filename = filename

        if size:
            image = resize(image, size, size, mode=mode)
            if mode == CROP:
                assert get_size(image) == (size, size)
        else:
            image = image.read()

        return make_response(image)
Example #4
0
    def convert(self, blob, size=500):
        """Size is the maximum horizontal size."""
        l = []
        with make_temp_file(blob) as in_fn, make_temp_file() as out_fn:
            try:
                subprocess.check_call(['pdftoppm', '-jpeg', in_fn, out_fn])
                l = sorted(glob.glob("%s-*.jpg" % out_fn))

                converted_images = []
                for fn in l:
                    converted = resize(
                        open(fn, 'rb').read(),
                        size,
                        size,
                        mode=FIT,
                    )
                    converted_images.append(converted)

                return converted_images
            except Exception as e:
                raise_from(ConversionError('pdftoppm failed'), e)
            finally:
                for fn in l:
                    try:
                        os.remove(fn)
                    except OSError:
                        pass
Example #5
0
  def make_response(self, image, size, mode, *args, **kwargs):
    """
    :param image: image as bytes
    :param s: requested maximum width/height size
    """
    from abilian.services.image import resize, get_format

    try:
      fmt = get_format(image)
    except IOError:
      #  not a known image file
      raise NotFound()

    self.content_type = u'image/png' if fmt == 'PNG' else u'image/jpeg'
    ext = u'.' + unicode(fmt.lower())

    filename = kwargs.get('filename')
    if not filename:
      filename = u'image'
    if not filename.lower().endswith(ext):
      filename += ext
    self.filename = filename

    if size:
      image = resize(image, size, size, mode=mode)
      if mode == CROP:
        assert get_size(image) == (size, size)
    else:
      image = image.read()

    return make_response(image)
Example #6
0
def document_preview_image(doc_id):
    """Returns a preview (image) for the file given by its id."""

    doc = get_document(doc_id)

    if not doc.antivirus_ok:
        return preview_missing_image()

    size = int(request.args.get("size", 0))

    # Just in case
    if size > MAX_PREVIEW_SIZE:
        size = MAX_PREVIEW_SIZE

    # compute image if size != standard document size
    get_image = (converter.get_image
                 if size == doc.preview_size else converter.to_image)

    content_type = "image/jpeg"

    if doc.content_type.startswith('image/svg'):
        image = doc.content
        content_type = doc.content_type
    elif doc.content_type.startswith("image/"):
        image = doc.content
        if size:
            image = resize(image, size, size, mode=FIT)
    else:
        page = int(request.args.get("page", 0))
        try:
            image = get_image(doc.digest, doc.content, doc.content_type, page,
                              size)
        except:
            # TODO: use generic "conversion failed" image
            image = ""

    if not image:
        return preview_missing_image()

    response = make_response(image)
    response.headers['content-type'] = content_type
    return response
Example #7
0
  def convert(self, blob, size=500):
    """Size is the maximum horizontal size."""

    in_fn = make_temp_file(blob)
    out_fn = mktemp(dir=TMP_DIR)
    l = []

    try:
      subprocess.check_call(['pdftoppm', '-jpeg', in_fn, out_fn])

      l = glob.glob("%s-*.jpg" % out_fn)
      l.sort()
      converted_images = []
      for fn in l:
        converted = resize(open(fn).read(), size)
        converted_images.append(converted)

      return converted_images
    except Exception, e:
      raise ConversionError(e)
Example #8
0
def document_preview_image(doc_id):
    """Returns a preview (image) for the file given by its id."""

    doc = get_document(doc_id)

    if not doc.antivirus_ok:
        return preview_missing_image()

    size = int(request.args.get("size", 0))

    # Just in case
    if size > MAX_PREVIEW_SIZE:
        size = MAX_PREVIEW_SIZE

    # compute image if size != standard document size
    get_image = converter.get_image if size == doc.preview_size else converter.to_image

    content_type = "image/jpeg"

    if doc.content_type.startswith("image/svg"):
        image = doc.content
        content_type = doc.content_type
    elif doc.content_type.startswith("image/"):
        image = doc.content
        if size:
            image = resize(image, size, size, mode=FIT)
    else:
        page = int(request.args.get("page", 0))
        try:
            image = get_image(doc.digest, doc.content, doc.content_type, page, size)
        except BaseException:
            # TODO: use generic "conversion failed" image
            image = ""

    if not image:
        return preview_missing_image()

    response = make_response(image)
    response.headers["content-type"] = content_type
    return response
Example #9
0
def group_mugshot(group_id):
    # TODO: duplicated code (with user_mugshot). Extract common method.
    size = int(request.args.get("s", 55))
    if size > 500:
        raise ValueError("Error, size = %d" % size)
    group = Group.query.get(group_id)

    if not group:
        raise NotFound()

    if group.photo:
        data = group.photo
    else:
        data = DEFAULT_GROUP_MUGSHOT

    if size:
        data = resize(data, size, size, mode=CROP)

    response = make_response(data)
    response.headers["content-type"] = "image/jpeg"
    response.headers.add("Cache-Control", "public, max-age=600")
    return response
Example #10
0
    def convert(self, blob, size=500):
        """Size is the maximum horizontal size."""
        l = []
        with make_temp_file(blob) as in_fn, make_temp_file() as out_fn:
            try:
                subprocess.check_call(["pdftoppm", "-jpeg", in_fn, out_fn])
                l = sorted(glob.glob("{}-*.jpg".format(out_fn)))

                converted_images = []
                for fn in l:
                    converted = resize(open(fn, "rb").read(), size, size)
                    converted_images.append(converted)

                return converted_images
            except Exception as e:
                raise_from(ConversionError("pdftoppm failed"), e)
            finally:
                for fn in l:
                    try:
                        os.remove(fn)
                    except OSError:
                        pass
Example #11
0
    def convert(self, blob: bytes, size: int = 500) -> List[bytes]:
        """Size is the maximum horizontal size."""
        file_list: List[str] = []
        with make_temp_file(blob) as in_fn, make_temp_file() as out_fn:
            try:
                subprocess.check_call(["pdftoppm", "-jpeg", in_fn, out_fn])
                file_list = sorted(glob.glob(f"{out_fn}-*.jpg"))

                converted_images = []
                for fn in file_list:
                    converted = resize(open(fn, "rb").read(), size, size)
                    converted_images.append(converted)

                return converted_images
            except Exception as e:
                raise ConversionError("pdftoppm failed") from e
            finally:
                for fn in file_list:
                    try:
                        os.remove(fn)
                    except OSError:
                        pass
Example #12
0
def group_mugshot(group_id):
    # TODO: duplicated code (with user_mugshot). Extract common method.
    size = int(request.args.get('s', 55))
    if size > 500:
        raise ValueError("Error, size = %d" % size)
    group = Group.query.get(group_id)

    if not group:
        raise NotFound()

    if group.photo:
        data = group.photo
    else:
        data = DEFAULT_GROUP_MUGSHOT

    if size:
        data = resize(data, size, size, mode=CROP)

    response = make_response(data)
    response.headers['content-type'] = 'image/jpeg'
    response.headers.add('Cache-Control', 'public, max-age=600')
    return response
Example #13
0
    def convert(self, blob, size=500):
        """Size is the maximum horizontal size."""
        file_list = []
        with make_temp_file(blob) as in_fn, make_temp_file() as out_fn:
            try:
                subprocess.check_call(["pdftoppm", "-jpeg", in_fn, out_fn])
                file_list = sorted(glob.glob(f"{out_fn}-*.jpg"))

                converted_images = []
                for fn in file_list:
                    converted = resize(open(fn, "rb").read(), size, size)
                    converted_images.append(converted)

                return converted_images
            except Exception as e:
                raise ConversionError("pdftoppm failed") from e
            finally:
                for fn in file_list:
                    try:
                        os.remove(fn)
                    except OSError:
                        pass
Example #14
0
  def convert(self, blob, size=500):
    """Size is the maximum horizontal size."""
    l = []
    with make_temp_file(blob) as in_fn, make_temp_file() as out_fn:
      try:
        subprocess.check_call(['pdftoppm', '-jpeg', in_fn, out_fn])
        l = glob.glob("%s-*.jpg" % out_fn)
        l.sort()

        converted_images = []
        for fn in l:
          converted = resize(open(fn).read(), size, size, mode=FIT)
          converted_images.append(converted)

        return converted_images
      except Exception as e:
        raise_from(ConversionError('pdftoppm'), e)
      finally:
        for fn in l:
          try:
            os.remove(fn)
          except OSError:
            pass
Example #15
0
 def get_thumb(self, data, width, height):
   try:
     get_format(data)
   except IOError:
     return u''
   return image.resize(data, width, height, mode=self.resize_mode)