00:00
好,那我们继续来上课,那么上节课呢,我们介绍了我们验证码的函数,对吧,验证验证码的这个操作啊,那么这节课呢,我们再来看一下,怎么再看一下我们图片缩放,那比如说在这里边啊画图咱们来先去考虑一下怎么叫图片缩放,那首先我得有一张原图片,对吧?打开了这个原图片以后,你告诉我你要缩放多大,比如说你要缩放一百一百的,那是不是就相当于我要去创建一个100乘100的这么一个画布,然后干嘛呀,然后想办法把这张图片,把这张图片给压缩的拷到,诶。这里边啊,把这张图片是不是给他压缩的方式,想办法给他CTRLCCTRLV啊复制对吧,对应的肯定有比例对应的进行缩放嘛,哎,缩放到这么大,然后给它拷贝到这里边。是不是这个意思?对不对,哎,这是不是就实现了什么,实现了咱们图片的缩放啊,哎,所以说图片缩放我需要做这么几件事儿,这案件事呢,第一件事儿是不是打开一张已有的这个图片,对吧?第二件事呢,我是不是创建你指定这个大小的画布也就这里边啊,我在这记吧,来第一件事是不是打开。
01:05
打开一张已有的图片,对吧,然后第二件事儿呢,干嘛,是不是这个创建指定缩放大。小的画布吧,哎,然后第三件事。第三个干嘛,是不是要计算,叫做计算缩放的比例啊,是不是缩放的比例对吧,比如说你当前是这个,呃,1000乘1000的这么一个图像,你想缩到一百一百,那是不是我得计算这个比例。对不对,哎,然后接下来第四件事干嘛,第四件事我是不是就讲。图像对吧,按照比例,按照比例拷贝,拷贝到什么,拷贝到这个创建的画布上。是不是就可以了,是不是就这么一个操作,哎,那OK。那好,那既然是这样的话,那我们在这里边就来去做一下,那首先我得有一张这个图片才行,对吧?来我们去拿一张图片啊,在这里边我们找一个什么呢?找一个小巴吧,来CTRLC把它。
02:02
复制过来。然后。来放到这里边啊,这块我们改一下叫什么呢?叫做A吧,A的gpt,那么图片再去缩放的时候,咱们要看啊,缩放我肯定要判断这个图片是比较宽还是比较高的图片了,对吧?诶你是比较宽的,那OK,我可能在说的时候是有一些公式的,对吧?比如说在这里面咱们打开啊看一下画图,你看这个图片就是比较高的,那你想在缩放的时候,谁是第一个先达到的,是不是这个宽度会先达到这个这个呃,缩放的要求,比如说缩放的时100乘100的对吧,那他在缩放时候是不是宽度下达到对吧?那好,我要什么呢?我要高度。对吧,比如说我强制把高度设置成100,那宽度是不是要计算出来,也就相当于比如说这里面重线调整大小,你看啊,它本身是什么,本身是比较宽的,垂直比较宽的,对吧,我给他说成到100的时候,它的这个水平位置是不是自己自算自动算的66啊。对不对,所以我要判断它是比较宽还是比较高的,然后你是比较宽的,那怎么办?我是不是就要去把把你的,比如说你是比较宽的,我就把你的宽强制到100,然后你高是计算出来的,如果你是比较高呢,我就把高说到100,然后宽是不是计算出来的,对不对?哎,那OK,那在这里面。
03:11
来,我们去新建一个。PP文件叫做零七缩放HUB啊,那在这里面我们要实现的是图片缩放功能。图片输光功能啊,那好了,那咱一会咱们来看啊,在这里边,首先咱们是干嘛,是不是第一件事儿。打开一张已有的。图片了,对吧,那怎么打开呢?比如说这里边我定一个这个pic等于什么呢?等于你原来有的图片叫什么叫a.GPG是吧?a.GPG好了,这就是一张已有的图片,是不是当前目录a.GPG对吧?那这里面当前目录是不是就可以省略掉了,那我就要打开它,打开它的话用什么函数呢?你看你是GPG的,那就对应的用image和rate。
04:00
GPG这个函数啊,用它打开,打开起来,打开一张已有的图片,这个时候一样会返回这个图像的资源啊,那咱们来看打印一下这个资源啊,打印一下Dollar。这里边。诶,扫一面积可from啊FROM来自G级的,好了,哎,我说怎么没给提示呢,那好了,那现在咱们再来看啊,在这里边零六我们完事了,我们看零七。是不是拿到这个图像资源了,哎,拿到图像资源以后,接下来干嘛,我是不是就要获取获取这个图像资源的宽和高啊,对吧,因为有宽和高以后,我是才能判断判断什么,判断它的收放比例对不对,比如说我还一样,我就要压缩100乘100的,就要压缩100乘100的啊,那现在我就干嘛来获取原图的宽和高,那怎么获取呢?比如说we。Width宽度就等于以面积S叉啊,这就获取图像获取这个资源的宽度,然后再来he等于以面积SY,那就获取什么这个乙面积的高度,那现在你看好了,我来为压缸DMP打印它的宽度,然后在V压缸对MP打印它的高度,高度是不是800啊对不对,那这个时候来。
05:12
刷新你看宽度是533,高度是到800对吧,那接下来干嘛,接下来我是不是只要有了它,我就可以干嘛计算。等比例的公式了吧。公式啊,那公式是什么呢?这里面我们先来判断判断什么,如果这个高了WD宽度要是小于小于谁小于这个高度的话,那是不是就证明它是比较高的,比较高的话,那好我就强制,比如说强制做一个什么,做一个这个叫做呃。等宽应该是等高啊,就等于,等于什么呢?就等于。这里面我先定义一下啊,到了W,咱们说了宽度要缩放成100,高度我是不是也要缩放成。100是不是这个意思啊,哎,所以我这里面来判,如果你的这个宽度要是小于高度的话,证明你是比较高的,那等要是比较高的,我就让这个等高啊强制为这个H是强制设置为100了,但是你的等宽呢?等宽我就要去计算,怎么计算呢?用宽度,用你实际的宽度去乘以,乘以什么,乘以你要缩放的这个高度除以实际的高度,就是这么一个公式啊,那否则L否则是不是就比较宽的图片,那比较宽的图片好,我就让你的等宽变成你的宽度那一样,那你的等高是不就得做计算了,那等高计算是不是就是你实际的高度去乘以,乘以什么?乘以你的这个压缩的宽度除以你实际的宽度。
06:35
看到了吧,哎,这就是他的这个计算的公式,好了,那有了这个公式以后,那接下来干嘛,接下来。我是不是就可以创建画布了,对吧?那在这里边一样叫做Dollar,比如说new image等于什么呢?Image true。COLOR12万啊,然后给它缩放,你要创建多大的到W到H,是不是宽度高度只有这些了。对吧,哎,创建宽高为这些的东西,然后接下来干嘛呢?诶。
07:03
呃。对吧,Iate啊,那接下来是不是要开始拷贝了,那拷贝图像。拷贝图像用什么东西来拷呢?用的就是这个叫做image copy拷贝啊,然后这里边。这些都能拷贝,比如说这里边我们用一个这个叫做。他吧啊来看一下,咱们可以在这里面搜一下啊,就的image拷贝copy对吧,我用的是这个东西对吧?你看从采样拷贝部分图像并用且能干嘛,调整大小对不对?哎,或者一面积拷贝size的,你看干嘛,是不是拷贝部分图像并调大是不是都可以啊对不对啊,比如说我就用它来去做了啊,那么做它的时候,你看下参数先是什么,先是我的目标的位置,然后圆的资源,然后目标的X点和目标的Y点和圆的X点和圆的Y点,还有目标的宽度和目标的高度,以及圆的宽度和圆的高度是不是给这些参数。
08:04
哎,所以在这里边,那我们这个目标是谁啊,是不是这个NEW1面积,然后圆呢,是这个以面积对吧,然后目标的这个X点呢。比如说零零吧,对吧,那这个圆的S点呢,是不是咱也从零零开始对吧?那拷贝多宽,目标的宽高呢?目标的宽是不是就是这个,呃,咱算的等宽等宽和等高啊对吧,因为咱得等比例所放嘛,对不对,然后圆呢,那圆的宽度是不是在这儿和he接D是不是这些。哎,那好了,这是不是就实现完了,实现完以后一样,那在这里边,比如说我们不需要干嘛,不需要再在图像再输出了,我要保存图像,保存图像啊,保存图像你就不需要告诉浏览器你图像类型了,你就直接可以保存了,比如说image,我还是用JPG来保存了啊,你要保存谁,我要保存Dollar new image的图像保存在哪呢?保存到当前目录,比如说叫S-A。S-A点好了,也就是说在原图的基础基名的基础上,我是不是加了个S杠,加了个S杠是代表缩放的,那好,那这个时候开始干嘛释放资源。
09:06
那释放资源,我这里边是不是俩资源呢?Image释放谁释放一个Dollar image还有image。再释放一个Dollar new image,好,那这个时候咱们来看啊,我在这里边来刷新。周尼刷新完以后,调用了未定义的函数以可瑞的出卡。Image瑞。T rue啊,开了。好,这就对了啊,那这个时候再来走,你刷新OK,没问题,没问题,以后咱们看在我这个目录下面有没有一个S-A的,那图片大小是不是100乘100了,那这个时候来打开看。是不是给压缩了,但压缩完大家有没有发现啊。这个图片压缩应该是这样的,对不对,这后面是不是都黑色看到了吗。哎,因为什么,这里边注意啊。我在这个位置上。我应该给他分配个背景才就才好,是不是,那我先分配个背景吧,来我分配个背景填充一下啊,不然你看的可能不太清楚。
10:06
呃,图像。保存图像在这一块。创建了这个资源对吧,创建这个资源以后开始分配背背景啊,到了B等于image。呃,Image Co Dollar image里面分配不对,Dollar new image里面分配255255 255是不是白色,哎,我给你分配一个白色背景啊。分配完以后开始进行什么进行填充。File给谁给Dollar了,NEW1IMAGE里边从零零开始对吧,填充BA这个位置好了,那现在再来看啊,我再来重新刷新,刷新完以后还是一样,在这个16这里边,我们再打开这个S-A看,因为图片我是从零零开始考的,实际上它的这个宽度达不到100,但是高度是不是达到100了,那不管怎么样,因为我们不可能说完全压缩100乘100对吧,因为图片是比较高的嘛,那这个时候我是不是应该让这个图片在这在在这个。
11:05
画布里面是居中显示才对呀,对不对,也就水平位置,我是不是得调整一下,也就是说在这里边。目标的。这个X点我是不是也变了,变成刀X我得调整对吧,那怎么调整这个X呢?这个X是不是就在算出来了,对不对,也就是说当当你把宽度强制设置完以后,那好,我的刀X应该等于什么,是不是就应该等于你这个,呃,实际要缩放的这个宽度。减去我等宽的宽度。再除以二是不是这个距离对吧,是不是就说X点了,那好了,那这个。减法是不是得先算呢?是这样吧,你看啊,比如说我实际说是100,但我说方完是60,那是不是我的这个X点的位置是不是就应该是什么,应该是100减去60乘40除以二乘20的位置,那是不是就两边各留出一半的空白了,对不对?那现在咱们再来看啊,这里边我们再来刷新一下,刷新完之后我们再在16这里边再打开这个,那你看这个数它在这里边是不是居中了。
12:11
但并没有居中。对吧,并没有居中啊,还是有这么一点点空白的吧,那有这么一点点空白是什么原因呢?我这个计算完肯定会有小数吧,所以我给他干嘛C。给他进行渠道。给他基于取证对吧,那这个时候我们再来刷新一次,刷新完之后,现在你再来看打开这个S-A来这回是不是有点居中了,哎,那OK,那你看我图片缩放是不是就搞定了。哎,那OK,一样,图片缩放你也需要给它封装成函数啊,这就是咱们机械库里边相关的这些知识,当然我们不光这些,比如说图片裁剪呢,图片水印呢,对吧?那这些水位水印是不是就打开一张已有的图片,把它去干嘛呀?给他去复制到另外一张已有图片,是不是就水印了,对不对?那裁剪呢?裁剪就是看你要从哪个像素到哪个像素裁剪,然后裁剪下来以后是不是再拷贝到一张新画布上就实现裁剪了。
13:07
对不对?哎,那这些功能用不着你都会写啊,用不着都会写,你只需要把我能给你讲的会写就行了,因为后期我们都是干嘛,都是在框架里边,别人都是写好了,我们可以直接用就行了啊,所以你只需要知道里面的原理就够用了啊,那这两个我一个写的,一个是什么验证码,一个收放,你一定要干嘛给我封装成对应的函数,而且要注意了,别人在打开图片的时候,有可能是GPG的,也有可能是PNG的,也有可能是GIF的,对吧?所以人家类型一旦改变的话,那你的这个函数是不是就在改变。对不对,哎,那OK好了,那这节课我们到这里。
我来说两句