def home(): if request.method == 'GET': # show the upload form return render_template('home.html') if request.method == 'POST': # check if a file was passed into the POST request if 'image' not in request.files: flash('No file was uploaded.') return redirect(request.url) image_file = request.files['image'] # if filename is empty, then assume no upload if image_file.filename == '': flash('No file was uploaded.') return redirect(request.url) # check if the file is "legit" if image_file and is_allowed_file(image_file.filename): filename = secure_filename(generate_random_name(image_file.filename)) filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename) image_file.save(filepath) passed = make_thumbnail(filepath) if passed: return redirect(url_for('predict', filename=filename)) else: return redirect(request.url)
def post(self, fileid): image = yield motor.Op( self.db.images.find_one, {'fileid': fileid} ) if not image: raise tornado.web.HTTPError(404, "File not found") text = self.get_argument('text') include_thumbnail = self.get_argument('include_thumbnail', False) if include_thumbnail: image_split = ( fileid[:1] + '/' + fileid[1:3] + '/' + fileid[3:] ) if image['contenttype'] == 'image/jpeg': extension = 'jpg' elif image['contenttype'] == 'image/png': extension = 'png' else: raise NotImplementedError(image['contenttype']) thumbnail_path = make_thumbnail( image_split, 300, extension, self.application.settings['static_path'] ) q = Queue('low', connection=self.redis) job = q.enqueue( tweet_with_media, text, thumbnail_path ) else: raise NotImplementedError('regular tweeting not done yet') delay = 1 total_delay = 0 ioloop_instance = tornado.ioloop.IOLoop.instance() while job.result is None: yield tornado.gen.Task( ioloop_instance.add_timeout, time.time() + delay ) delay += 1 total_delay += delay if total_delay > 5: break if job.result: id_ = job.result self.redis.hset('tweets', fileid, id_) #url = self.reverse_url('admin_image', fileid) url = self.reverse_url('admin_home') self.redirect(url)
def post(self, fileid): image = yield motor.Op(self.db.images.find_one, {'fileid': fileid}) if not image: raise tornado.web.HTTPError(404, "File not found") text = self.get_argument('text') include_thumbnail = self.get_argument('include_thumbnail', False) if include_thumbnail: image_split = (fileid[:1] + '/' + fileid[1:3] + '/' + fileid[3:]) if image['contenttype'] == 'image/jpeg': extension = 'jpg' elif image['contenttype'] == 'image/png': extension = 'png' else: raise NotImplementedError(image['contenttype']) thumbnail_path = make_thumbnail( image_split, 300, extension, self.application.settings['static_path']) q = Queue('low', connection=self.redis) job = q.enqueue(tweet_with_media, text, thumbnail_path) else: raise NotImplementedError('regular tweeting not done yet') delay = 1 total_delay = 0 ioloop_instance = tornado.ioloop.IOLoop.instance() while job.result is None: yield tornado.gen.Task(ioloop_instance.add_timeout, time.time() + delay) delay += 1 total_delay += delay if total_delay > 5: break if job.result: id_ = job.result self.redis.hset('tweets', fileid, id_) #url = self.reverse_url('admin_image', fileid) url = self.reverse_url('admin_home') self.redirect(url)
def post(self): secret = self.get_argument('secret', '') if secret != settings.SECRET: self.finish('wrong secret') return status['busy'] += 1 images = yield database.raw_query("SELECT ihash FROM image", ()) self.hashes = set() for image in images: self.hashes.add(image[0]) self.fileinfo = self.request.files['image'][0] sha1 = hashlib.sha1() sha1.update(self.fileinfo['body']) ihash = sha1.hexdigest() if ihash in self.hashes: logging.info('image %s already imported' % ihash) status['busy'] -= 1 self.finish('already imported') return exif_data = pyexiv2.ImageMetadata.from_buffer(self.fileinfo['body']) exif_data.read() size = len(self.fileinfo['body']) gps_ref = list('NE0') lat = None lng = None altitude = 0 if 'Exif.Image.ImageWidth' in exif_data.keys(): width = int(exif_data['Exif.Image.ImageWidth'].value) elif 'Exif.Photo.PixelXDimension' in exif_data.keys(): width = int(exif_data['Exif.Photo.PixelXDimension'].value) else: width = exif_data.dimensions[0] if 'Exif.Image.ImageLength' in exif_data.keys(): height = int(exif_data['Exif.Image.ImageLength'].value) elif 'Exif.Photo.PixelYDimension' in exif_data.keys(): height = int(exif_data['Exif.Photo.PixelYDimension'].value) else: height = exif_data.dimensions[1] if 'Exif.GPSInfo.GPSLatitude' in exif_data.keys(): lat = utils.exif2gps(exif_data['Exif.GPSInfo.GPSLatitude'].value) if 'Exif.GPSInfo.GPSLongitude' in exif_data.keys(): lng = utils.exif2gps(exif_data['Exif.GPSInfo.GPSLongitude'].value) if 'Exif.GPSInfo.GPSAltitude' in exif_data.keys(): altitude = float(exif_data['Exif.GPSInfo.GPSAltitude'].value) if 'Exif.GPSInfo.GPSLatitudeRef' in exif_data.keys(): gps_ref[0] = exif_data['Exif.GPSInfo.GPSLatitudeRef'].value if 'Exif.GPSInfo.GPSLongitudeRef' in exif_data.keys(): gps_ref[1] = exif_data['Exif.GPSInfo.GPSLongitudeRef'].value if 'Exif.GPSInfo.GPSAltitudeRef' in exif_data.keys(): gps_ref[2] = exif_data['Exif.GPSInfo.GPSAltitudeRef'].value self.camera_make = '' self.camera_model = '' orientation = 1 moment = datetime.datetime(1970, 1, 1) if 'Exif.Image.Make' in exif_data.keys(): self.camera_make = exif_data['Exif.Image.Make'].value if 'Exif.Image.Model' in exif_data.keys(): self.camera_model = exif_data['Exif.Image.Model'].value if 'Exif.Image.Orientation' in exif_data.keys(): orientation = exif_data['Exif.Image.Orientation'].value if 'Exif.Image.DateTime' in exif_data.keys(): moment = exif_data['Exif.Image.DateTime'].value self.image = database.Image(ihash=ihash, description='', album=None, moment=moment, width=width, height=height, orientation=orientation, filename=self.fileinfo['filename'], size=size, path='', lat=lat, lng=lng, altitude=altitude, gps_ref=''.join(gps_ref), access=0) cameras = yield database.raw_query("SELECT id, make, model FROM camera", ()) self.cameras = {} for camera in cameras: self.cameras[camera[1] + '_' + camera[2]] = camera if self.camera_make or self.camera_model: key = self.camera_make + '_' + self.camera_model if key in self.cameras: self.image.camera = self.cameras[key][0] else: camera = database.Camera(make=self.camera_make, model=self.camera_model) result = yield camera.save() self.image.camera = result[0] else: self.image.camera = None result = yield self.image.save() image_id = result[0] path = 'pic' + str(int(image_id)/1000) self.image.path = path path = 'original/' + path image_file = PilImage.open(StringIO(self.fileinfo['body'])) directory = settings.MEDIA_PATH + '/' + path if not os.path.exists(directory): os.makedirs(directory) output_file = open(directory+'/'+self.image.ihash, 'wb') output_file.write(self.fileinfo['body']) output_file.close() resolutions = [(64, 64), (192, 192), (960, 960)] for resolution in resolutions: directory = settings.MEDIA_PATH + '/thumbnails/' + str(resolution[0]) + 'px/pic' + str(int(image_id)/1000) if not os.path.exists(directory): os.makedirs(directory) outfile = directory + '/' + self.image.ihash utils.make_thumbnail(image_file, outfile, resolution[0], resolution[1]) database.raw_query('UPDATE image SET path=%s WHERE id=%s RETURNING id', (self.image.path, image_id)) cache.del_value('geotagged_images') cache.del_value('stats') self.finish('image saved, id %d' % image_id) status['busy'] -= 1
def main(): pil_im = Image.open(PATH_TO_IMG) thumbnail = make_thumbnail(pil_im, 256, 128) save_as(pil_im, OUTPUT_IMG, "png")
def add_new_style(self,filename, base64_img): style_path = os.path.join(STYLES_FOLDER, filename) utils.decode_img(base64_img, style_path) utils.make_thumbnail(style_path)
def crt_thumb(sender, instance, signal, *args, **kwargs): """ create a new thumb for the created url""" #when it is deleted control if it has a thumbnail? make_thumbnail(instance.file)
def crt_thumb(sender, instance, signal, *args, **kwargs): """ create a new thumb for the created url""" # when it is deleted control if it has a thumbnail? make_thumbnail(instance.file)