python开智书

作业回顾

颜色背景知识

记得柏拉图的洞穴隐喻么,洞穴中的人看到的永远是墙上的影子,丝毫不知外面世界真是的养子。

电子设备上看到的颜色,不是物理世界真实的颜色,而是欺骗大脑感官细胞的把戏。 RGB三原色不是出于物理原因,而是由于生理原因造成的。例如,红光与绿光按某种比例复合,对三种锥状细胞刺激后产生的色觉可与眼睛对单纯的黄光的色觉等效。但决不能认为红光与绿光按某种比例复合后生成黄光,或黄光是由红光和绿光复合而成的。

多层RGB如何叠加起来,RGBA。alpha通道一般用作不透明度参数。如果一个像素的alpha通道数值为0%,那它就是完全透明的(也就是看不见的),而数值为100%则意味着一个完全不透明的像素(传统的数字图像)。

HSV的调色原理 HSV以人类更熟悉的方式封装了关于颜色的信息:“这是什么颜色?深浅如何?明暗如何?”。 一般的画板程序都支持HSV这种直观的调色方式。

如何让颜色有水彩效果?

前面的作业中使用过这样的颜色常量 canvas.draw_text('A', (20, 20), 12, 'Red') 我以为这个颜色的常量仅仅是字符串,或者一个24bit的数的接口,没有方便的操作方法。 coursera上的课程没有同步去看视频,失去了发现fading dots这个例子的机会。

事实上,codeskulptor的文档中Color Constants 下面写的很清楚: More generally, you may use any HTML color name. Furthermore, custom colors and transparencies can be specified in a any CSS color format, including hexadecimal, RGB, RGBA, HSL, and HSLA. 没有认真看这一段,导致一直没有找到作业的突破口。结果直到看到fading dots这个例子,才明白这个字符串接口可以如此灵活,于是打算利用RGBA中alpha这个参数来实现透明叠加的效果。

大妈画板解读

  • 大妈之前的画板作业很标准,主要在这几个方面:
    • 数据抽象准确:当我看到PEN这个命名的时候,我才明白,虽然第一次作业普通画板,画圆形,画椭圆,画正方形,其实都是现实生活中的画笔,这样命名以后。PEN是工具,point是具体画的动作。有了这两个抽象以后,就可以想画什么画什么,程序很清晰。
    • 使用SAE来突破codeskulptor的限制,巧妙的将画图数据保存和加载: echo_txt = urllib2.urlopen('%s/%s'% (_SAE, put_points) )
    • 全局变量,局部变量命名规范
    • http://www.codeskulptor.org/#user39_orjQbDl8ynbQi8o_2.py

我的思路

  • 使用rgba颜色模型,将大妈的作业扩展支持一个水彩类型,主要修改两处:
    • 将"blue"这种初始化颜色替换成'rgba(0,0,255,1)'
    • def draw_all(canvas),增加一个“watercolor”类型,支持RGBA模式的水彩,有叠加效果。
  • 想明白以后,增加几行代码搞定,一切如此清晰简单!
  • https://github.com/csufuyi/mooc.py/blob/master/src/iippy-1/zoomquiet.py

附录

本周任务

可分享的水彩点彩色板...

期待:

较深入的理解色彩机制 发现 codeskulptor.org 魔法 在尽可能短的代码行数中完成 最好能动画式演示绘制过程 要求:

或是 真正的透明水彩效果,能完成色彩叠加! 基础: 两周前的点彩画板基础上,模拟出水彩点彩效果 可用: 任意一种基础色,都可以模拟出水彩效果来 合格: 用点彩算法模拟出随机笔触效果,进行手绘支持 天才: 包装水彩算法,可以让其它 codeskulptor 画板加载使用 教程期待:

色彩学基础概念 grb 颜色基础 什么是水彩 怎么在 codeskulptor 上跨平台脚本分享? ...