Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
def main():
    pil_im = Image.open(PATH_TO_IMG)
    thumbnail = make_thumbnail(pil_im, 256, 128)
    save_as(pil_im, OUTPUT_IMG, "png")
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
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)