广告

原创 Python的练习02

2019-5-15 22:59 419 6 8 分类: 软件与OS

Python学习了一段时间的基础语法,的确感觉其语法的自由度很高,入门容易,但是并不友好。《Python编程从入门到实践》后半部分开始讲pygame来制作游戏,所描述的安装方式非常的简单:下载pygame;然后在cmd下输入命令:pip install pygame,安装完成。

 

我懵逼了。What?Pygame什么玩意?哪里下载?于是我搜索了一下,找到了pygame的官网 http://www.pygame.org/download.shtml ,里面最新的是这个:

 

但是下载下来以后,怎么敲命令都不行,折腾一个下午都没安装上去,总是错误,我都开始怀疑智商了,差一点就放弃了。找了很多安装文件之类的,都无法加载。到了晚上终于找到了http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame这个地址,里面才找到合用的pygame安装文件。

 

用最后一个文件装好pygame以后,简单试验了一下书中的历程,然后兴致勃勃又去安装Image。这个要先安装PIL?!又是搜索不到,最终还是在这个网址下面找到了Pillow

 

看第一句话才知道,Python 2下面用的是PIL,但是不支持Python 3,我用的是Python 3.7,所以要用Pillow

Python的库实在是太混乱了,我已经晕了,不光说2.x3.x不兼容、win32win amd64不兼容我能理解以外,3.63.7都不兼容是什么鬼?下载3.6版本的Pillow就是装不上,也不说为什么。如果我们用VS,肯定会向下兼容,如果安装的库不合适,会自动提示,也会有官方的下载地址,甚至可以自动升级。而目前我所看到的python,仍然是一头雾水,安装错误一点提示都没有,完全需要运气去搜索猜测。到底能不能给我这样年纪大了的爱好者一条活路?!

为什么别人家安装是这样的吨吨吨下载安装完成:

 

而我是需要自己搜索、下载,自己敲命令自己判断是否安装成功?!怎么会这么复杂?

 

真是费了大功夫才把Image的库安装成功,并且写了一个简单的图像处理程序:

from PIL import Image

 

pil_im = Image.open("1.jpg")

im2 = pil_im #备份原始图像

 

w,h = pil_im.size #获取图像尺寸

pil_im = pil_im.resize((w+w,h)) #将图像尺寸横向拉长

 

box = (0, 0, w,h)

re = im2.crop(box)

pil_im.paste(re,box) #将原始图像放在左侧

 

box = (w, 0, w+w,h)

re = re.convert("L")

pil_im.paste(re,box) #将灰度图像放在右侧

 

pil_im.show()

 

输出的结果就是原始图像和灰度图像的对比,如下图,其实除了妹子很清纯以外,程序并不咋地:

 

而我十年前用BCB写的灰度图像转换用了多少行?如下,光一个灰度的函数就已经十几行了,还没算前面框架搭建,文件读取等函数,而在Python里面只用2行就可以实现,而且速度也快了不少,优势的确很明显。

void __fastcall TForm1::GrayTranClick(TObject *Sender)

{

        Image1->Picture->Bitmap->Assign(Image1->Picture->Bitmap);

        int red,green,blue;

        int gray;

        GetRgbp(Sender);

        for(i = 1;i < x-1;i++)

                {

                      for(j = 1;j < y-1;j++)

                      {

                      red = rgbp[i][j].r;

                      green = rgbp[i][j].g;

                      blue = rgbp[i][j].b;

                      gray = red/3+green/3+blue/3;

                       Bitmap->Canvas->Pixels[i][j] = RGB(gray,gray,gray);

                      }

                }

                Image1->Picture->Bitmap->Assign(Bitmap);

}