精华内容
下载资源
问答
  • 一、状态保持 session  状态保持 ... #2、客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服务器端储存与会话有关的数据 ...#3、储存方式包括cookie、session,会话一般指sess...

     

    Django 11 form表单(状态保持session、form表单及注册实现)

    一、状态保持 session

      状态保持

    #1、http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态
    #2、客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服务器端储存与会话有关的数据
    #3、储存方式包括cookie、session,会话一般指session
    #4、使用cookie,所有数据存储在客户端,注意不要存储敏感数据
    #5、是由session方式,所有数据存储在服务器端,在客户端cookie中存储session_id
    #6、状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据
    
    #注意:不同请求者之间不会共享这个数据,与请求者一一对应

      使用session

    #启用会话后,每个HttpRequest对象将具有一个session属性,它是一个类字典对象
    
    -get(key,default=None) #根据键获取会话的值
    -clear() #清除所有会话
    -flush() #删除当前的会话数据并删除会话的cookie
    -del request.session['member_id']- #删除

      会话过期时间

    #1、代码中配置
    #set_expiry(value)表示设置会话的过期时间;如果没有指定,默认为两星期后过期
    #如果value是一个整数,则回家整数秒后过期;如果value是一个imedelta对象,会话将会在当前时间加上这个指定的日期/时间过期
    #如果value是0,那么用户会话的cookie将会在用户的浏览器关闭时过期;如果value为None,那么会话永不过期
    
    #2、配置文件settings里面配置
    #是否关闭浏览器使得session过期,默认为False
    SESSION_EXPIRY_AT_BROWSER_CLOSE = False
    
    #是否每次请求都保存session,默认修改之后保存
    SESSION_SAVE_EVERY_REQUEST = False
    
    #session的cookie失效时间,默认为2周
    SESSION_COOKIE_AGE = 1209600
    from django.shortcuts import render,redirect,reverse
    
    # Create your views here.
    
    
    def home(request):
        '''
        主页
        '''
        username = request.session.get('username','未登录') #在登录的时候设置了session,这里就用session来获取用户信息
        return render(request,'test22/home.html',
                      context={'username':username})
    
    def login_test(request):
        '''
        登录页
        '''
        if request.method == 'GET':
            return render(request,'test22/login.html')
        elif request.method == 'POST':
            username = request.POST.get('username') #获取POST中的username
            request.session['username'] = username #session是一个字典对象,直接传值便可以存入数据
            request.session.set_expiry(0) #set_expiry(value)表示设置会话的过期时间;如果没有指定,默认为两星期后过期
                #如果value是一个整数,则回家整数秒后过期;如果value是一个imedelta对象,会话将会在当前时间加上这个指定的日期/时间过期
                #如果value是0,那么用户会话的cookie将会在用户的浏览器关闭时过期;如果value为None,那么会话永不过期
            return redirect(reverse('test22_home'))
    
    
    def logout(request):
        '''
        退出
        '''
        request.session.flush()
        return redirect(reverse('test22_home'))

    二、form表单及注册实现

      form表单的引用

    #登录页面和注册页面都会用form表单来提交数据
    
    #当数据提交到后台去,都需要在视图函数中去验证数据的合法性
    
    #django中提供了一个form表单的功能,这个表单可以用来验证数据的合法性,还可以用来生成html代码(生成代码功能基本不用)

      关于django form表单的使用

    #1、创建一个forms.py的文件,放到指定的app中,然后在里面写表单
    
    #2、表单是通过类实现的,继承自formsForm,然后在里面定义要验证的字段
    
    #3、在表单中,创建字段和模型是一模一样的,但是没有null=True或者blank=True等这几种参数了,有的参数是required=True/False
    
    #4、使用is_valid()方法可以验证用户提交的数据是否合法,而且HTML表单元素的name必须和django中的表单的name保持一致,否则匹配不到
    
    #5、is_bound属性  用来表示form是否绑定了数据,如果绑定了,则返回True,否则返回False
    
    #6、cleaned_data  这个实在is_vaild()返回True的时候,保存用户提交上来的数据

      form.py

    from django import forms
    
    class AddForm(forms.Form):
        first = forms.IntegerField()
        second = forms.IntegerField()
    
    
    class RegisterForm(forms.Form):
        username = forms.CharField(max_length=20,min_length=6)
        password = forms.CharField(max_length=10,min_length=6,
                                   widget=forms.PasswordInput( #width、attrs、error_message是前端的内容
                                       attrs={'placeholder':'请输入密码'}
                                   ),
                                   error_messages={'min_length':'密码长度小于6',
                                                   'max_length':'密码长度大于10'}
                                   )
        password_repeat = forms.CharField(widget=forms.PasswordInput())
        email = forms.EmailField()
    
    class LoginForm(forms.Form):
        username = forms.CharField(max_length=20,min_length=6)
        password = forms.CharField(max_length=10,min_length=6)

      view.py

    from django.shortcuts import render,redirect,reverse
    from django.http import HttpResponse
    from django.contrib.auth.hashers import make_password,check_password
    # Create your views here.
    
    from .forms import AddForm,RegisterForm,LoginForm
    from .models import User
    def add_test(request):
        if request.method == 'GET':
            form = AddForm()
            return render(request,'test22/add_test.html',
                          context={'form':form, #这就是模型渲染到模板中
                                   })
        elif request.method == 'POST':
            form = AddForm(request.POST)   #把POST的值放到AddForm类当中去,然后在赋值给form,就是拿到POST的值
            if form.is_valid():  #判断是否合法
                first = form.cleaned_data.get('first')  #通过cleaned_data方法获取,这也是一个字典类型的,可以用get拿到数据
                second = form.cleaned_data.get('second')
                return HttpResponse(first*second)
    
    def register(request):
        '''
        注册页
        '''
        if request.method == 'GET':
            form = RegisterForm()
            return render(request,'test22/register.html',
                          context={'form':form})
        elif request.method == 'POST':
            form = RegisterForm(request.POST)
            if form.is_valid():
                username = form.cleaned_data.get('username')
                password = form.cleaned_data.get('password')
                password_repeat = form.cleaned_data.get('password_repeat')
                email = form.cleaned_data.get('email')
                if password == password_repeat:
                    password = make_password(password) #给用户输入的密码加密
                    User.objects.create(username = username,
                                        password = password,
                                        email = email)
                    return render(request,'test22/login.html')
                else:
                    return HttpResponse('注册失败')
            else:
                return HttpResponse('注册失败')
    
    def login(requset):
        '''
        登录页
        '''
        if requset.method == 'GET':
            form = LoginForm()
            return render(requset,'test22/login.html',
                          context={'form':form})
        elif requset.method == 'POST':
            form = LoginForm(requset.POST)
            if form.is_valid():
                username = form.cleaned_data.get('username')
                password = form.cleaned_data.get('password')
                user = User.objects.filter(username=username) #查询数据库中名字为username的数据
                if user:#如果存在
                    if check_password(password,user[0].password): #验证POST中的密码和数据库中的密码是否相同,相同,session;不同,返回登录页面
                        requset.session['username'] = username
                        return render(requset,'test22/home.html')
                    else:
                        redirect(reverse('login'))
                else:
                    return redirect(reverse('login'))
            else:
                return redirect(reverse('login'))

     

    转载于:https://www.cnblogs.com/xuchengcheng1215/p/9414618.html

    展开全文
  • JS实现 Event Bus

    2020-07-23 14:23:57
    选择Map作为储存事件的结构,因为作为键值对的储存方式Map比一般对象更加适合,操作起来也更加简洁 class EventBus { constructor(maxListeners) { const defaultMax = 10; this._events = new Map(); this._...

    文章转载自 掘金文章

    利用ES6的class关键字对Event进行初始化,包括Event的事件清单和监听者上限.

    选择Map作为储存事件的结构,因为作为键值对的储存方式Map比一般对象更加适合,操作起来也更加简洁

    class EventBus {
        constructor () {
            this._events = this._events || new Map(); // 存储事件/回调键值对
            this._maxListeners = this._maxListeners || 10; // 设立监听上限
        }
    
        // $on 监听    
        on(type,fn) {
            const handler = this._events.get(type); // 获取对应事件名称的函数清单
            if (!handler) {
                this._events.set(type, fn);
            } else if (handler && typeof handler === 'function') {
                // 如果handler是函数,说明当前只有一个监听者
                // 再次添加监听者,需要改用 数组储存
                this._events.set(type,[handler,fn]);
            } else {
                // 已有多个监听者,直接往数组里push函数即可
                handler.push(fn);
            }
        }
    
        // $emit 触发
        emit(type, ...args) {
            let handler = this._events.get(type);
    
            if (Array.isArray(handler)) {
                // 是数组,说明有多个监听者,需要依次触发里边的函数
                for (let i=0;i<handler.length;++i) {
                    if (args.length > 0) {
                        handler[i].apply(this,args);
                    } else {
                        handler[i].call(this);
                    }
                }
            } else {
                // 单个函数的情况直接触发即可
                if (args.length > 0) {
                    handler.apply(this,args);
                } else {
                    handler.call(this);
                }
            }
    
            return true
        }
    
        // $off 移除监听 (此处跟原文相比略有改动)
        off(type,fn) {
            const handler = this._events.get(type);
    
            if (handler && typeof handler === 'function') {
                // 函数,说明只有一个监听者,直接删除就行
                this._events.delete(type,fn)
            } else {
                handler.splice(handler.findIndex(e => e === fn), 1);
            }
        }
    }
    
    
    
    

     

    展开全文
  • 一、状态保持 session  状态保持 ...#2、客户端与服务器端的一次通信,就是一...#3、储存方式包括cookie、session,会话一般指session #4、使用cookie,所有数据存储在客户端,注意不要存储敏感数据 #5、是由sess...

    一、状态保持 session

      状态保持

    复制代码

    #1、http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态
    #2、客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服务器端储存与会话有关的数据
    #3、储存方式包括cookie、session,会话一般指session
    #4、使用cookie,所有数据存储在客户端,注意不要存储敏感数据
    #5、是由session方式,所有数据存储在服务器端,在客户端cookie中存储session_id
    #6、状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据
    
    #注意:不同请求者之间不会共享这个数据,与请求者一一对应

    复制代码

      使用session

    #启用会话后,每个HttpRequest对象将具有一个session属性,它是一个类字典对象
    
    -get(key,default=None) #根据键获取会话的值
    -clear() #清除所有会话
    -flush() #删除当前的会话数据并删除会话的cookie
    -del request.session['member_id']- #删除

      会话过期时间

    复制代码

    #1、代码中配置
    #set_expiry(value)表示设置会话的过期时间;如果没有指定,默认为两星期后过期
    #如果value是一个整数,则回家整数秒后过期;如果value是一个imedelta对象,会话将会在当前时间加上这个指定的日期/时间过期
    #如果value是0,那么用户会话的cookie将会在用户的浏览器关闭时过期;如果value为None,那么会话永不过期
    
    #2、配置文件settings里面配置
    #是否关闭浏览器使得session过期,默认为False
    SESSION_EXPIRY_AT_BROWSER_CLOSE = False
    
    #是否每次请求都保存session,默认修改之后保存
    SESSION_SAVE_EVERY_REQUEST = False
    
    #session的cookie失效时间,默认为2周
    SESSION_COOKIE_AGE = 1209600

    复制代码

    复制代码

    from django.shortcuts import render,redirect,reverse
    
    # Create your views here.
    
    
    def home(request):
        '''
        主页
        '''
        username = request.session.get('username','未登录') #在登录的时候设置了session,这里就用session来获取用户信息
        return render(request,'test22/home.html',
                      context={'username':username})
    
    def login_test(request):
        '''
        登录页
        '''
        if request.method == 'GET':
            return render(request,'test22/login.html')
        elif request.method == 'POST':
            username = request.POST.get('username') #获取POST中的username
            request.session['username'] = username #session是一个字典对象,直接传值便可以存入数据
            request.session.set_expiry(0) #set_expiry(value)表示设置会话的过期时间;如果没有指定,默认为两星期后过期
                #如果value是一个整数,则回家整数秒后过期;如果value是一个imedelta对象,会话将会在当前时间加上这个指定的日期/时间过期
                #如果value是0,那么用户会话的cookie将会在用户的浏览器关闭时过期;如果value为None,那么会话永不过期
            return redirect(reverse('test22_home'))
    
    
    def logout(request):
        '''
        退出
        '''
        request.session.flush()
        return redirect(reverse('test22_home'))

    复制代码

    二、form表单及注册实现

      form表单的引用

    #登录页面和注册页面都会用form表单来提交数据
    
    #当数据提交到后台去,都需要在视图函数中去验证数据的合法性
    
    #django中提供了一个form表单的功能,这个表单可以用来验证数据的合法性,还可以用来生成html代码(生成代码功能基本不用)

      关于django form表单的使用

    复制代码

    #1、创建一个forms.py的文件,放到指定的app中,然后在里面写表单
    
    #2、表单是通过类实现的,继承自formsForm,然后在里面定义要验证的字段
    
    #3、在表单中,创建字段和模型是一模一样的,但是没有null=True或者blank=True等这几种参数了,有的参数是required=True/False
    
    #4、使用is_valid()方法可以验证用户提交的数据是否合法,而且HTML表单元素的name必须和django中的表单的name保持一致,否则匹配不到
    
    #5、is_bound属性  用来表示form是否绑定了数据,如果绑定了,则返回True,否则返回False
    
    #6、cleaned_data  这个实在is_vaild()返回True的时候,保存用户提交上来的数据

    复制代码

      form.py

    复制代码

    from django import forms
    
    class AddForm(forms.Form):
        first = forms.IntegerField()
        second = forms.IntegerField()
    
    
    class RegisterForm(forms.Form):
        username = forms.CharField(max_length=20,min_length=6)
        password = forms.CharField(max_length=10,min_length=6,
                                   widget=forms.PasswordInput( #width、attrs、error_message是前端的内容
                                       attrs={'placeholder':'请输入密码'}
                                   ),
                                   error_messages={'min_length':'密码长度小于6',
                                                   'max_length':'密码长度大于10'}
                                   )
        password_repeat = forms.CharField(widget=forms.PasswordInput())
        email = forms.EmailField()
    
    class LoginForm(forms.Form):
        username = forms.CharField(max_length=20,min_length=6)
        password = forms.CharField(max_length=10,min_length=6)

    复制代码

      view.py

    复制代码

    from django.shortcuts import render,redirect,reverse
    from django.http import HttpResponse
    from django.contrib.auth.hashers import make_password,check_password
    # Create your views here.
    
    from .forms import AddForm,RegisterForm,LoginForm
    from .models import User
    def add_test(request):
        if request.method == 'GET':
            form = AddForm()
            return render(request,'test22/add_test.html',
                          context={'form':form, #这就是模型渲染到模板中
                                   })
        elif request.method == 'POST':
            form = AddForm(request.POST)   #把POST的值放到AddForm类当中去,然后在赋值给form,就是拿到POST的值
            if form.is_valid():  #判断是否合法
                first = form.cleaned_data.get('first')  #通过cleaned_data方法获取,这也是一个字典类型的,可以用get拿到数据
                second = form.cleaned_data.get('second')
                return HttpResponse(first*second)
    
    def register(request):
        '''
        注册页
        '''
        if request.method == 'GET':
            form = RegisterForm()
            return render(request,'test22/register.html',
                          context={'form':form})
        elif request.method == 'POST':
            form = RegisterForm(request.POST)
            if form.is_valid():
                username = form.cleaned_data.get('username')
                password = form.cleaned_data.get('password')
                password_repeat = form.cleaned_data.get('password_repeat')
                email = form.cleaned_data.get('email')
                if password == password_repeat:
                    password = make_password(password) #给用户输入的密码加密
                    User.objects.create(username = username,
                                        password = password,
                                        email = email)
                    return render(request,'test22/login.html')
                else:
                    return HttpResponse('注册失败')
            else:
                return HttpResponse('注册失败')
    
    def login(requset):
        '''
        登录页
        '''
        if requset.method == 'GET':
            form = LoginForm()
            return render(requset,'test22/login.html',
                          context={'form':form})
        elif requset.method == 'POST':
            form = LoginForm(requset.POST)
            if form.is_valid():
                username = form.cleaned_data.get('username')
                password = form.cleaned_data.get('password')
                user = User.objects.filter(username=username) #查询数据库中名字为username的数据
                if user:#如果存在
                    if check_password(password,user[0].password): #验证POST中的密码和数据库中的密码是否相同,相同,session;不同,返回登录页面
                        requset.session['username'] = username
                        return render(requset,'test22/home.html')
                    else:
                        redirect(reverse('login'))
                else:
                    return redirect(reverse('login'))
            else:
                return redirect(reverse('login'))

    复制代码

    原文:https://www.cnblogs.com/xuchengcheng1215/p/9414618.html

    展开全文
  • 有效像素 数码相机的像素数包括有效像素(EffectivePixels)和最大像素(MaximumPixels)。与最大像素不同的是有效像素数是指真正参与感光成像...数码图片的储存方式一般以像素(Pixel)为单位,每个象素是数码图片...

    有效像素

           数码相机的像素数包括有效像素(Effective Pixels)和最大像素(Maximum Pixels)。与最大像素不同的是有效像素数是指真正参与感光成像的像素值,而最高像素的数值是感光器件的真实像素,这个数据通常包含了感光器件的非成像部分,而有效像素是在镜头变焦倍率下所换算出来的值。

           数码图片的储存方式一般以像素(Pixel)为单位,每个象素是数码图片里面积最小的单位。像素越大,图片的面积越大。要增加一个图片的面积大小,如果没有更多的光进入感光器件,唯一的办法就是把像素的面积增大,这样一来,可能会影响图片的锐力度和清晰度。所以,在像素面积不变的情况下,数码相机能获得最大的图片像素,即为有效像素。


    最大像素

    最大像素英文名称为Maximum Pixels,所谓的最大像素是经过插值运算后获得的。插值运算通过设在数码相机内部的DSP芯片,在需要放大图像时用最临近法插值、线性插值等运算方法,在图像内添加图像放大后所需要增加的像素。插值运算后获得的图像质量不能够与真正感光成像的图像相比。以最大像素拍摄的图片清晰度比不上以有效像素拍摄的。


    Sensor:

    影像感光器件成像的因素主要有两个方面:一是感光器件的面积;二是感光器件的色彩深度。感光器件面积越大,成像较大,相同条件下,能记录更多的图像细节,各像素间的干扰也小,成像质量越好。但随着数码相机向时尚小巧化的方向发展,感光器件的面积也只能是越来越小。

    除了面积之外,感光器件还有一个重要指标,就是色彩深度,也就是色彩位,就是用多少位的二进制数字来记录三种原色。非专业型数码相机的感光器件一般是24位的,高档点的采样时是30位,而记录时仍然是24位,专业型数码相机的成像器件至少是36位的,据说已经有了48位的CCD。

    对于24位的器件而言,感光单元能记录的光亮度值最多有2^8=256级,每一种原色用一个8位的二进制数字来表示,最多能记录的色彩是256x256x256约16,77万种。对于36位的器件而言,感光单元能记录的光亮度值最多有2^12=4096级,每一种原色用一个12位的二进制数字来表示,最多能记录的色彩是4096x4096x4096约68.7亿种。举例来说,如果某一被摄体,最亮部位的亮度是最暗部位亮度的400倍,用使用24位感光器件的数码相机来拍摄的话,如果按低光部位曝光,则凡是亮度高于256备的部位,均曝光过度,层次损失,形成亮斑,如果按高光部位来曝光,则某一亮度以下的部位全部曝光不足,如果用使用了36位感光器件的专业数码相机,就不会有这样的问题。


    闪光灯

    闪光灯的英文学名为Flash Light。闪光灯也是加强曝光量的方式之一,尤其在昏暗的地方,打闪光灯有助于让景物更明亮。使用闪光灯也会出现弊端,例如在拍人物时,闪光灯的光线可能会在眼睛的瞳孔发生残留的现象,进而发生「红眼」的情形,因此许多相机商都将"消除红眼"这项功能加入设计,在闪光灯开启前先打出微弱光让瞳孔适应,然后再执行真正的闪光,避免红眼发生。中低档数码相机一般都具备三种闪光灯模式,即自动闪光、消除红眼与关闭闪光灯。再高级一点的产品还提供“强制闪光”,甚至“慢速闪光”功能。


    变焦

    变焦分两种,一种是数字变焦;一种是光学变焦。作用与手机上,多数都采用数码变焦。

    数字变焦

    数字变焦也称为数码变焦,英文名称为Digital Zoom,数码变焦是通过数码相机内的处理器,把图片内的每个象素面积增大,从而达到放大目的。这种手法如同用图像处理软件把图片的面积改大,不过程序在数码相机内进行,把原来CCD影像感应器上的一部份像素使用"插值"处理手段做放大,将CCD影像感应器上的像素用插值算法将画面放大到整个画面。

    与光学变焦不同,数码变焦是在感光器件垂直方向向上的变化,而给人以变焦效果的。在感光器件上的面积越小,那么视觉上就会让用户只看见景物的局部。但是由于焦距没有变化,所以,图像质量是相对于正常情况下较差。通过数码变焦,拍摄的景物放大了,但它的清晰度会有一定程度的下降,所以数码变焦并没有太大的实际意义。不过索尼独创 “智能数码变焦”,据说该先进技术,可以使图像在数码变焦之后仍然保持一定的清晰度。

    光学变焦

    光学变焦英文名称为Optical Zoom,数码相机依靠光学镜头结构来实现变焦。数码相机的光学变焦方式与传统35mm相机差不多,就是通过镜片移动来放大与缩小需要拍摄的景物,光学变焦倍数越大,能拍摄的景物就越远。光学变焦是通过镜头、物体和焦点三方的位置发生变化而产生的。当成像面在水平方向运动的时候,如下图,视觉和焦距就会发生变化,更远的景物变得更清晰,让人感觉像物体递进的感觉。

    显而易见,要改变视角必然有两种办法,一种是改变镜头的焦距。用摄影的话来说,这就是光学变焦。通过改变变焦镜头中的各镜片的相对位置来改变镜头的焦距。另一种就是改变成像面的大小,即成像面的对角线长短在目前的数码摄影中,这就叫做数码变焦。

    实际上数码变焦并没有改变镜头的焦距,只是通过改变成像面对角线的角度来改变视角,从而产生了“相当于”镜头焦距变化的效果。如今的数码相机的光学变焦倍数大多在2倍-5倍之间,即可把10米以外的物体拉近至5-3米近;也有一些数码相机拥有10倍的光学变焦效果。

    家用摄录机的光学变焦倍数在10倍~22倍,能比较清楚的拍到70米外的东西。使用增倍镜能够增大摄录机的光学变焦倍数。如果光学变焦倍数不够,我们可以在镜头前加一增倍镜,其计算方法是这样的,一个2倍的增距镜,套在一个原来有4倍光学变焦的数码相机上,那么这台数码相机的光学变焦倍数由原来的1倍、2倍、3倍、4倍变为2倍、4倍、6倍和8倍,即以增距镜的倍数和光学变焦倍数相乘所得。


    连拍

    连拍功能英文学名为continuous shooting,是通过节约数据传输时间来捕捉摄影时机。连拍模式通过将数据装入数码相机内部的高速存储器(高速缓存),而不是向存储卡传输数据,可以在短时间内连续拍摄多张照片。由于数码相机拍摄要经过光电转换,a/d转换及媒体记录等过程,其中无论转换还是记录都需要花费时间,特别是记录花费时间较多。

    因此,所有数码相机的连拍速度都不很快。连拍一般以帧为计算单位,好像电影胶卷一样,每一帧代表一个画面,每秒能捕捉的帧数越多,连拍功能越快。

    目前,数码相机中最快的连拍速度为7帧/秒,而且连拍3秒钟后必须再过几秒才能继续拍摄。当然,连拍速度对于摄影记者和体育摄影受好者是必须注意的指标,而普通摄影场合可以不必考虑。

    一般情况下,连拍捕捉的照片,分辨率和质量都会有所减少。有些数码相机在连拍功能上可以选择,拍摄分辨率较小的照片,连拍速度可以加快,反之,分辨率 大的照片的连拍速度会相对减缓。通过连续快拍模式,只须轻按按钮,即可连续拍摄,将连续动作生动地记录下来。


    自动白平衡

    白平衡英文名称为White Balance。物体颜色会因投射光线颜色产生改变,在不同光线的场合下拍摄出的照片会有不同的色温。例如以钨丝灯(电灯泡)照明的环境拍出的照片可能偏黄,一般来说,CCD没有办法像人眼一样会自动修正光线的改变。白平衡就是无论环境光线如何,让数码相机默认“白色”,就是让他能认出白色,而平衡其他颜色在有色光线下的色调。

    颜色实质上就是对光线的解释,在正常光线下看起来是白颜色的东西在较暗的光线下看起来可能就不是白色,还有荧光灯下的"白"也是"非白"。对于这一切如果能调整白平衡,则在所得到的照片中就能正确地以"白"为基色来还原其他颜色。现在大多数的商用级数码相机均提供白平衡调节功能。正如前面提到的白平衡与周围光线密切相关,因而,启动白平衡功能时闪光灯的使用就要受到限制,否则环境光的变化会使得白平衡失效或干扰正常的白平衡。

    景深是指在摄影机镜头或其他成像器前沿着能够取得清晰图像的成像景深相机器轴线所测定的物体距离范围。在聚焦完成后,在焦点前后的范围内都能形成清晰的像,这一前一后的距离范围,便叫做景深。
    ————————————————

    展开全文
  • Camera 基础

    2013-08-14 17:48:37
    有效像素  数码相机的像素数包括有效像素(Effective Pixels)和最大像素(Maximum Pixels)。与最大像素不同的是有效像素数是指真正参与感光成像... 数码图片的储存方式一般以像素(Pixel)为单位,每个象素是数码
  • 其使用设备包括阀门、填充液位计、压力测量等,这些设备通常通过罐前的专用坑位与之相连,并采用钢板覆盖的方式加以保护,这些设备经常设在燃气站的加油处。气体危害:液化石油气的比重几乎是空气的两倍,泄露堆积到...
  • 在计算机技术中,虚拟化(Virtualization) 是将计算机物理资源如...一般所指的虚拟化资源包括计算能力和资料储存。  需要注意的是虚拟化并不等同于云计算,虚拟化只是庞大的云计算生态圈中一个子应用。 Hyp...
  • 第一章 MySQL基础-简单查询 数据库的概念 数据库: 存储数据的大型仓库, 数据库由表,视图,触发器,函数,存储过程,事件等...数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的
  • 一般VCD所储存的影片是使用.DAT的文件格式,虽然同样是属于MPEG压缩方式,但是和一般影像处理软件所能处理的影片格式.MPG还是有所不同。所以想要把VCD里面的影片抓出来编辑,还需要转换一下。VCDGear正是一个设计...
  • 这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理组态所限制,一般所指的虚拟资源包括计算能力和资料存储。 ​ 在实际得生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能...
  • 一般用邻接矩阵或者邻接表来储存,本实现代码中 采用词典来存储,相比于邻接矩阵,词典方式来存储会导致访问并没有那么快,因为需要遍历key对应的list才可以找到想要的边。 另外,无论是dfs还是bfs其实跟树遍历...
  • docker的简介

    2020-12-26 16:16:21
    这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理组态所限制,一般所指的虚拟资源包括计算能力和资料存储。 在实际得生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低...
  • 虚拟化

    2020-08-19 15:19:40
    一般所指的虚拟化资源包括计算能力和资料存储, 在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理
  •  一个提供多种数据类类型储存,整个系统都在内存中运行的,  定期通过异步的方式把数据刷到磁盘进行保存的一个内存数据库  因为实在内存中操作数据,所以效率非常高,但受制于物理内存的限制,一般用作处理少量...
  • 虚拟化(Virtualization)是一...一般所指的虚拟化资源包括计算能力和资料储存。-----维基百科  虚拟化是为某些事物创造的虚拟版本,比如操作系统,计算机系统,存储设备和网络资源等。-----信息技术雨库    ...
  • 通信的革命性变化是在以电为信息载体后发生,现代通信一般指电子信息通信。 通信历史的五个阶段 第一阶段的通信方式是语言和简单符号。 第二阶段从发明文字以及邮政通信开始。书信便是搭载文字信息的使者。 ...
  • camera driver

    2018-05-25 09:38:04
    通常情况下,图片的储存方式一般以像素为单位,每个象素是数码图片里面积最小的单位。像素越大,图片的面积越大。要增加一个图片的面积大小,如果没有更多的光进入感光器件,唯一的办法就是把像素的面积增大,这样...
  • 数字货币交易所是进行数字货币交易的平台,根据交易方式的不同,可以衍生出许多不同的交易所种类,随着科技的不断进步,用户需求的不断增加。为了让用户对于交易所拥有更好的体验。我们不仅在技术方面有所要求,也在...
  • 值类型变量的特点在于它的数据是直接储存在栈中的 ,其中包括整数类型,浮点类型以及布尔类型。具有以下性能。 (1)值类型变量存储在栈中, (2)访问值类型变量时,一般都是直接访问实例的。 (3)复制值类型变量...
  • xStop指令截入器

    2011-06-06 08:54:36
    8个二进制数组合1个十六进制数,叫做字节,计算机一般以字节为最基本单位来储存数据的。 程式的执行指令也是一些字节,它被装载到内存中以指令方式执行,我们修改了这些字节,就会影响到执行。 “内存动态”修改...
  • 位是计算机内部数据储存的最小单位。 字节(byte) ,计算机中数据处理的基本单位,通常情况下一字节等于8位。 字 (word),计算机进行数据处理时,一次存取、加工和传送的数据长度称为字。一个字通常由一个或多...
  • — 此外,RecoveRx数据修复软件还同时支持StoreJet/SD/CompactFlash卡格式化及数据防护功能,为您提供最完整、最便利的方式管理存储设备。 — 资料救援:提供一般救援与进阶救援功能,修复已遗失的数码相片、文件、...
  • 您的 MySQL 数据库账号应当拥有 CREATE、DROP、ALTER 等执行权限,同时文件空间需不低于 2M,数据库空间不低于 5M,通常您的虚拟空间都会满足这个条件,以满足包括 08CMS 在内的绝大多数网络软件的正常运行。...
  • 您的 MySQL 数据库账号应当拥有 CREATE、DROP、ALTER 等执行权限,同时文件空间需不低于 2M,数据库空间不低于 5M,通常您的虚拟空间都会满足这个条件,以满足包括 08CMS 在内的绝大多数网络软件的正常运行。...
  • 您的 MySQL 数据库账号应当拥有 CREATE、DROP、ALTER 等执行权限,同时文件空间需不低于 2M,数据库空间不低于 5M,通常您的虚拟空间都会满足这个条件,以满足包括 08CMS 在内的绝大多数网络软件的正常运行。...
  • 您的 MySQL 数据库账号应当拥有 CREATE、DROP、ALTER 等执行权限,同时文件空间需不低于 2M,数据库空间不低于 5M,通常您的虚拟空间都会满足这个条件,以满足包括 08CMS 在内的绝大多数网络软件的正常运行。...
  • 财物无忧4.1

    2016-08-05 10:50:56
    财物无忧使用对象包括:企业老板、财务人员、一般员工,不同使用的对象所分配权限 也会不同,所能进行的事项也会不一样。 更新日志 版本 4.1 1 增加全屏截图功能 2 提高程序稳定性,减少出错几率
  • 在计算机中数据的储存方式一般是低位数储存在低位字节,高位数储存在高位字节。比如,十进制数41715转换为16进制的数为A2F3,但在计算机中这个数被存为F3A2。 看了以上内容大家对数据的存贮和数据的对应关系都...

空空如也

空空如也

1 2 3 4 5
收藏数 90
精华内容 36
关键字:

储存方式一般包括