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