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