Esempio n. 1
0
    def POST(self):
        inputs = sh.inputs()
        assert inputs.has_key('model_name'), u'请指定需要裁剪的数据类型'
        assert inputs.has_key('model_id'), u'请指定需要裁剪的数据ID'
        assert inputs.has_key('column_name'), u'请指定裁剪的列名'
        assert int(float(inputs.get('region_width', '0'))) > 0
        assert int(float(inputs.get('region_height', '0'))) > 0

        model = sh.model(inputs.model_name)
        item = model.get(inputs.model_id)
        image = item.image

        real_width, real_height = sh.imageSize(image.url) # 图片的真实宽高
        crop = inputs.crop
        region_width = int(float(inputs.region_width)) # 选择区域的宽度
        region_height = int(float(inputs.region_height)) # 选择区域的高度

        start_x  = int(crop.split()[0]) # 选中的起始位置
        start_y  = int(crop.split()[1])
        region_x  = int(crop.split()[2])# 选中的宽度
        region_y = int(crop.split()[3]) # 选中的高度
        
        # convert 裁剪区域
        region = '%dx%d+%d+%d' % (region_x * real_width / region_width, 
                                region_y * real_height / region_height,
                                real_width * start_x / region_width, 
                                real_height * start_y / region_height)

        path = sh.urlToPath(image.url)
        os.system('convert %s -crop %s %s' % (path, region, path+'.crop'))
        model.update(inputs.model_id, {inputs.column_name: crop})
        return sh.refresh()
Esempio n. 2
0
    def savePortrait(self, Userid, image_file):
        user_model = sh.model('User')
        user = user_model.get(Userid)

        if user.image and image_file:
            path = sh.urlToPath(user.image.url)
            os.system('rm %s' % (path + '.crop'))

        user_model.update(Userid, {sh.model('Image').image_key: image_file})

        # 自动设置裁剪区域为整个图片
        user = user_model.get(Userid)  # 为了重新拿到image数据
        size = sh.imageSize(user.image.url)
        user_model.update(user.id, {'crop': '0 0 %d %d' % size})
        path = sh.urlToPath(user.image.url)
        os.system('cp %s %s' % (path, path + '.crop'))
Esempio n. 3
0
    def savePortrait(self, Userid, image_file):
        user_model = sh.model('User')
        user = user_model.get(Userid)

        if user.image and image_file:
            path = sh.urlToPath(user.image.url)
            os.system('rm %s' % (path+'.crop'))

        user_model.update(Userid, {sh.model('Image').image_key: image_file})

        # 自动设置裁剪区域为整个图片
        user = user_model.get(Userid) # 为了重新拿到image数据
        size = sh.imageSize(user.image.url)
        user_model.update(user.id, {'crop': '0 0 %d %d' % size})
        path = sh.urlToPath(user.image.url)
        os.system('cp %s %s' % (path, path+'.crop'))
Esempio n. 4
0
    def POST(self):
        if not sh.session.is_login:
            return sh.redirectToLogin()
        user_model = sh.model('User')
        user = user_model.get(sh.session.id)

        inputs = sh.inputs()
        assert inputs.get('action', '')

        if inputs.action == 'upload':
            if inputs.get('image_file', ''):
                self.savePortrait(sh.session.id, inputs.image_file)
            return sh.redirect('/accounts/portrait')

        elif inputs.action == 'crop':

            if not user.image:
                return sh.alert('请先上传头像')

            assert int(float(inputs.get('region_width', '0'))) > 0
            assert int(float(inputs.get('region_height', '0'))) > 0
            real_width, real_height = sh.imageSize(user.image.url)  # 图片的真实宽高
            crop = inputs.crop
            region_width = int(float(inputs.region_width))  # 选择区域的宽度
            region_height = int(float(inputs.region_height))  # 选择区域的高度

            start_x = int(crop.split()[0])  # 选中的起始位置
            start_y = int(crop.split()[1])
            region_x = int(crop.split()[2])  # 选中的宽度
            region_y = int(crop.split()[3])  # 选中的高度

            # convert 裁剪区域
            region = '%dx%d+%d+%d' % (region_x * real_width / region_width,
                                      region_y * real_height / region_height,
                                      real_width * start_x / region_width,
                                      real_height * start_y / region_height)

            path = sh.urlToPath(user.image.url)
            os.system('convert %s -crop %s %s' %
                      (path, region, path + '.crop'))
            user_model.update(sh.session.id, {'crop': crop})

            # 删除以前裁剪图片的各种尺寸副本
            os.system('rm %s.crop_*' % path)

            return sh.redirect('/accounts')
Esempio n. 5
0
    def POST(self):
        if not sh.session.is_login:
            return sh.redirectToLogin()
        user_model = sh.model('User')
        user = user_model.get(sh.session.id)

        inputs = sh.inputs()
        assert inputs.get('action', '')

        if inputs.action == 'upload':
            if inputs.get('image_file', ''):
                self.savePortrait(sh.session.id, inputs.image_file)
            return sh.redirect('/accounts/portrait')

        elif inputs.action == 'crop':

            if not user.image:
                return sh.alert('请先上传头像')

            assert int(float(inputs.get('region_width', '0'))) > 0
            assert int(float(inputs.get('region_height', '0'))) > 0
            real_width, real_height = sh.imageSize(user.image.url) # 图片的真实宽高
            crop = inputs.crop
            region_width = int(float(inputs.region_width)) # 选择区域的宽度
            region_height = int(float(inputs.region_height)) # 选择区域的高度

            start_x  = int(crop.split()[0]) # 选中的起始位置
            start_y  = int(crop.split()[1])
            region_x  = int(crop.split()[2])# 选中的宽度
            region_y = int(crop.split()[3]) # 选中的高度
            
            # convert 裁剪区域
            region = '%dx%d+%d+%d' % (region_x * real_width / region_width, 
                                    region_y * real_height / region_height,
                                    real_width * start_x / region_width, 
                                    real_height * start_y / region_height)

            path = sh.urlToPath(user.image.url)
            os.system('convert %s -crop %s %s' % (path, region, path+'.crop'))
            user_model.update(sh.session.id, {'crop': crop})

            # 删除以前裁剪图片的各种尺寸副本
            os.system('rm %s.crop_*' % path)

            return sh.redirect('/accounts')
Esempio n. 6
0
    def POST(self):
        inputs = sh.inputs()
        assert inputs.has_key('model_name'), u'请指定需要裁剪的数据类型'
        assert inputs.has_key('model_id'), u'请指定需要裁剪的数据ID'
        assert inputs.has_key('column_name'), u'请指定裁剪的列名'
        assert int(float(inputs.get('region_width', '0'))) > 0
        assert int(float(inputs.get('region_height', '0'))) > 0

        model = sh.model(inputs.model_name)
        item = model.get(inputs.model_id)
        image = item.image

        real_width, real_height = sh.imageSize(image.url)  # 图片的真实宽高
        crop = inputs.crop
        region_width = int(float(inputs.region_width))  # 选择区域的宽度
        region_height = int(float(inputs.region_height))  # 选择区域的高度

        start_x = int(crop.split()[0])  # 选中的起始位置
        start_y = int(crop.split()[1])
        region_x = int(crop.split()[2])  # 选中的宽度
        region_y = int(crop.split()[3])  # 选中的高度

        # convert 裁剪区域
        region = '%dx%d+%d+%d' % (region_x * real_width / region_width,
                                  region_y * real_height / region_height,
                                  real_width * start_x / region_width,
                                  real_height * start_y / region_height)

        path = sh.urlToPath(image.url)
        os.system('convert %s -crop %s %s' % (path, region, path + '.crop'))
        model.update(inputs.model_id, {inputs.column_name: crop})

        # 删除以前裁剪图片的各种尺寸副本
        os.system('rm %s.crop_*' % path)

        return sh.refresh()