Пример #1
0
 def __wrapped_view(file_obj, **kwargs):
     try:
         im = Image.open(file_obj)
     except:
         os.remove(file_obj.name)
         return abort(400, "cannot identify image file")
     version = view_func(im, kwargs['width'], kwargs['height'])
     cache_file_path = get_thumb_path_for_kwargs(**kwargs)
     thumb = open(cache_file_path, 'wb')
     version.save(thumb, 'PNG')
     thumb.close()
     return 1
Пример #2
0
def resize(engine):
    num_pages = None
    # 1. Get the image or raise 404
    params = {
        'url': request.args.get('url', None),
        'width': int(request.args.get('width', 0)),
        'height': int(request.args.get('height', 0)),
        'engine': engine
    }

    if params['width'] == 0 and params['height'] == 0:
        abort(400, u'You must set either width or height')

    if params['url']:
        if params['url'].startswith('/'):
            params['url'] = '%s%s' % (request.host_url, url[1:])
    else:
        abort(404)

    try:
        params['page'] = int(request.args.get('page', 1))
    except:
        params['page'] = 1

    # Call the reader
    file_obj, is_from_cache = THUMBNAILER_READER(params['url'])

    if engine == 'document':
        num_pages = documents.count_pages(file_obj.read())
        if params['page'] > num_pages or params['page'] < 1:
            abort(400, 'page not found')

    # If needed we call the engine
    if not (have_cache_for_kwargs(**params) and is_from_cache):
        print "CACHE STATUS", is_from_cache, have_cache_for_kwargs(
            **params), get_thumb_path_for_kwargs(**params)
        num_pages = THUMBNAILER_ENGINE[engine](file_obj, **params) or None

    # Get the thumb
    thumb = THUMBNAILER_WRITER(**params)

    # 3. Returns the image
    response = make_response(thumb.read())
    response.content_type = 'image/png'

    if num_pages is not None:
        response.headers.add('x-thumbnailer-num_pages', str(num_pages))
    else:
        response.headers.add('x-thumbnailer-num_pages', 1)

    file_obj.close()
    thumb.close()
    return response
Пример #3
0
 def __wrapped_view(file_obj, **kwargs):
     try:
         im = Image.open(file_obj)
     except:
         os.remove(file_obj.name)
         return abort(400, "cannot identify image file")
     version = view_func(im, kwargs['width'], kwargs['height'])
     cache_file_path = get_thumb_path_for_kwargs(**kwargs)
     thumb = open(cache_file_path, 'wb')
     version.save(thumb, 'PNG')
     thumb.close()
     return 1
Пример #4
0
def resize(engine):
    num_pages = None
    # 1. Get the image or raise 404
    params = {
        "url": request.args.get("url", None),
        "width": int(request.args.get("width", 0)),
        "height": int(request.args.get("height", 0)),
        "engine": engine,
    }

    if params["width"] == 0 and params["height"] == 0:
        abort(400, u"You must set either width or height")

    if params["url"]:
        if params["url"].startswith("/"):
            params["url"] = "%s%s" % (request.host_url, url[1:])
    else:
        abort(404)

    try:
        params["page"] = int(request.args.get("page", 1))
    except:
        params["page"] = 1

    # Call the reader
    file_obj, is_from_cache = THUMBNAILER_READER(params["url"])

    if engine == "document":
        num_pages = documents.count_pages(file_obj.read())
        if params["page"] > num_pages or params["page"] < 1:
            abort(400, "page not found")

    # If needed we call the engine
    if not (have_cache_for_kwargs(**params) and is_from_cache):
        print "CACHE STATUS", is_from_cache, have_cache_for_kwargs(**params), get_thumb_path_for_kwargs(**params)
        num_pages = THUMBNAILER_ENGINE[engine](file_obj, **params) or None

    # Get the thumb
    thumb = THUMBNAILER_WRITER(**params)

    # 3. Returns the image
    response = make_response(thumb.read())
    response.content_type = "image/png"

    if num_pages is not None:
        response.headers.add("x-thumbnailer-num_pages", str(num_pages))
    else:
        response.headers.add("x-thumbnailer-num_pages", 1)

    file_obj.close()
    thumb.close()
    return response
Пример #5
0
def extract_image(file_obj, **kwargs):
    if kwargs['width']:
        if kwargs['height']:
            size = '%dx%d' % (kwargs['width'], kwargs['height'])
        else:
            size = '%dx' % kwargs['width']
    else:
        size = 'x%d' % kwargs['height']

    pdf_name = file_obj.name

    params = kwargs.copy()
    if 'max_previews' in params:
        del params['max_previews']
    params['page'] = 1

    # Extract PDF page as images
    os.rename(pdf_name, '%s.pdf' % pdf_name)
    docsplit = Docsplit()
    try:
        docsplit.extract_images(str(pdf_name+'.pdf'), output='/tmp', sizes=[size], formats=['png'])
    except RunError:
        abort(400, 'Please enter a pdf file')
    os.rename('%s.pdf' % pdf_name, pdf_name)


    pngs = list(glob('/tmp/%s/%s*.png' % (size, os.path.basename(pdf_name))))
    # For each page, we create the image in the cache
    for page_png in pngs:
        m = re.search('_(\d+)\.png$', page_png)
        page_number = int(m.group(1))
        params['page'] = page_number
        print params
        page_cache_file_path = get_thumb_path_for_kwargs(**params)
        cache_file = open(page_cache_file_path, 'w')
        with open(page_png, 'r') as f:
            cache_file.write(f.read())
        cache_file.close()
        # print page_cache_file_path, params['page']
    print len(pngs)
        
    remove_list = pngs
    for remove_file in remove_list:
        os.remove(remove_file)

    return len(pngs)
Пример #6
0
def extract_image(file_obj, **kwargs):
    if kwargs["width"]:
        if kwargs["height"]:
            size = "%dx%d" % (kwargs["width"], kwargs["height"])
        else:
            size = "%dx" % kwargs["width"]
    else:
        size = "x%d" % kwargs["height"]

    pdf_name = file_obj.name

    params = kwargs.copy()
    if "max_previews" in params:
        del params["max_previews"]
    params["page"] = 1

    # Extract PDF page as images
    os.rename(pdf_name, "%s.pdf" % pdf_name)
    docsplit = Docsplit()
    try:
        docsplit.extract_images(str(pdf_name + ".pdf"), output="/tmp", sizes=[size], formats=["png"])
    except RunError:
        abort(400, "Please enter a pdf file")
    os.rename("%s.pdf" % pdf_name, pdf_name)

    pngs = list(glob("/tmp/%s/%s*.png" % (size, os.path.basename(pdf_name))))
    # For each page, we create the image in the cache
    for page_png in pngs:
        m = re.search("_(\d+)\.png$", page_png)
        page_number = int(m.group(1))
        params["page"] = page_number
        print params
        page_cache_file_path = get_thumb_path_for_kwargs(**params)
        cache_file = open(page_cache_file_path, "w")
        with open(page_png, "r") as f:
            cache_file.write(f.read())
        cache_file.close()
        # print page_cache_file_path, params['page']
    print len(pngs)

    remove_list = pngs
    for remove_file in remove_list:
        os.remove(remove_file)

    return len(pngs)