Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。
这篇教程将会展示如何用python的图形化包“Pygame”和基础的文件I/O来创建一个自写程序。这个程序将可以仿照给定的图片来创作一幅马赛克画。Python是一种非常强大的编程语言。它有着许多的内建函数和可下载的软件包。在这片教程的末尾,你将会拥有一副属于你自己的蒙娜丽莎马赛克画并且将会学会如何对所有你喜欢的图片进行处理。注意,本文是为那些对Python,Pygame和文件I/O有着深刻理解的用户准备的。
第一部分 下载图片
1.下载《蒙娜丽莎》的图片。这是创建你的马赛克画的基础。注意这幅图像的尺寸(以像素为单位)将对所要写的代码有重要影响。
·将它保存为“mona.jpg”
·图像大小设置为743像素 * 1155像素。确保图片是以这个尺寸保存的,否则将不会得到正确地马赛克图片。
第二部分 创建主程序
1.打开一个新的Python文件。将其命名为“makeMona.py”(可自定义)。
2.导入所需要的模块。这个程序需要Pygame模块来显示图片并且需要Math模块来执行你所添加的功能。
3.创建显示图片的部分。在开始处理图像以前,需要创建显示窗口以使Mona Lisa图像能够被加载并且显示出来
·display.set_mode((743,1155))是对于显示尺寸的设置。(743,1155)代表显示的尺寸;注意这要和图像的尺寸一致。
4为自写程序创建一个目标文件。在“makeMona”程序中,设置要写入的新文件。
·变量mon是您对于马赛克文件的引用。声明中新文件叫做“mona.py”。“w”代表将会对新文件进行写入的操作。
5初始化新程序。现在可以开始写入“mona.py”文件。在这里你需要导入新文件所需的模块以及设置显示图片的尺寸。
·mon.write表示现在正把下面的代码写入到新文件中。其中设置的显示尺寸要和Mona Lisa图像的尺寸一致。
6在makeMona.py中显示图片。为了确认你的图片已经正确地加载到你的程序中,你需要让图片显示出来。
7.绘制马赛克图片。现在可以将图片分解为小的色块来创建马赛克图像。为了得到最好的马赛克效果而不至于使得图像变形,建议将五个像素合并到一个色块内。
·mon.write("draw.rect(screen,"+c+",("+str(x)+","+str(y)+",4,4)) ")这是最重要的一行,分析如下:
·draw.rect(screen,"+c+", 用来描绘一个个马赛克色块(屏幕上显示出来的一个个小矩形) 然后将颜色"c"关联到屏幕的对应位置 str(screen.get_at((x,y)))。这是如何将颜色映射到每个像素的过程。
·("+str(x)+","+str(y)中的"x"和"y"代表色块的坐标。用str来转换是由于程序需要按处理字符串的方式来处理这些坐标值(这是因为现在这些值是在三引号中,而所有引号中的值都是string格式)
·+",4,4)) ")中的4,4用来表示马赛克华中每个色块的尺寸,“”是换行符,用来是程序切换到新的一行来写接下来的代码。
8.创建while-running循环。像所有的Pygame程序一样,你必须在mona.py中写入while-running循环。
第三部分 代码的检查和测试
1.检查代码。你的主程序makeMona.py现在已经完成了。以下是完整的代码。
2.打开新生成的mona.py文件。在你makeMona程序所保存的目录下,可以找到新生成的mona.py程序文件。
·如果你打开这个文件,你将会发现几百行代码。这简直就像魔法一般,每行代码都对应着马赛克画中的一个独立色块。
·打开这个文件可能需要几秒钟的时间;因为它非常的大。
3.运行mona.py。如果之前的每一步都没有问题,最后一步只需要运行mona.py来看下你的《蒙娜丽莎》马赛克画。
第四部分 常见问题
1 排除程序故障。在实现你自己的马赛克代码中很容易犯一些小错误。以下是一些会遇到的常见问题以及解决方法。
·新生成的程序文件在哪?主程序运行完毕后,新程序文件应当出现在主程序所在的目录中。
·新生成的程序不能执行。你为自写程序所写的所有代码都在三引号之中。检查所有引号之中的代码,确保没有丢掉冒号引号或者缩进方面的错误。
·为什么图像扭曲了?这可能是由于错误的显示尺寸所造成的。确保display.set_mode中的显示尺寸在整个代码中是相同的。http://www.wikihow.com/Make-a-Self%E2%80%90Writing-Mosaic-Program-in-Python

如何用python编写一个绘制马赛克图像的自写程序mask = np.zeros相关推荐

  1. python编程代码画画_如何用python编写一个绘制马赛克图像的自写程序

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 这篇教程将会展示如何用python的图形化包"Pygame"和基础的文件I/O来创建一 ...

  2. 如何用Python编写一个求 1到n阶乘之和的程序

    各位许久不见了,甚是想念! 前段时间我进入高中阶段学习,一直还没有适应,现在好些了就继续写博客了. 看到很多人关注我,点赞或是评论,我感觉太高兴了! C语言这块我暂时先放下了,我想自己学学Python ...

  3. 基于Python编写一个B站全自动抽奖的小程序

    本文将利用Python编写一个B站全自动抽奖的小程序,可以实时监控自己关注的UP主,如果关注的UP主中有人发布了抽奖的动态,就自动参与这个抽奖.这样就能不错过任何一个可以暴富的机会了.需要的可以参考一 ...

  4. 利用python写时钟程序_如何用python编写一个番茄钟程序

    今天,我们尝试用python来编写一个简单的PC端番茄钟,需要实现的功能如下:启动时"滴"一声并询问:"休息时间结束!是否开始一个新的番茄钟?" 如果用户点击& ...

  5. 每日一课 | 如何用Python编写一个Lisp解释器

    作者 | Peter Norvig 译者 | Tianyu 编辑 | Freesia 出品 | Python大本营(ID: pythonnews) 今日知识点  前言 || 展示如何实现一个计算机语言 ...

  6. 如何用Python编写一个Lisp解释器

    作者 | Peter Norvig 译者 | Tianyu 编辑 | Freesia 来源 | Python大本营(ID: pythonnews) 这篇文章有两个目的:一是展示如何实现一个计算机语言的 ...

  7. 如何用Python编写一个聊天室

    本课程来自实验楼Python聊天室,若需转载请注明原文出处. 一.课程介绍 1.简介 本次项目课是实现简单聊天室程序的服务器端和客户端. 2.知识点 服务器端涉及到asyncore.asynchat和 ...

  8. python能写什么脚本_如何用python编写一个阴阳师脚本(自动刷御魂,业原火)(2)...

    在上一篇文章里,我们已经安装好了python,安装好了所有需要的库,现在可以开始码代码了嗷 先让我们来分析一下需要实现的脚本功能,首先就是这个开始战斗此时队友还没来... 当队友(舍友)进来时,开始战 ...

  9. 关于点名的简单python编程_如何用python编写一个简易的随机点名软件

    匿名用户 1级 2018-05-30 回答 思路:1.定义一个字典,把名字和数字对应起来:2.引用随机模块:3.输入要点名的个数,通过循环输出名字. 具体代码如下: # -*- coding:utf- ...

最新文章

  1. 《Python基础教程第二版》第五章-条件、循环和其他语句(一)
  2. c语言选择题写小写字母表,C语言选择题(最全版).doc
  3. MVC项目开发中那些用到的知识点(登录权限认证)
  4. 【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 / 接口 方法 super )
  5. MySQL—三表查询
  6. jQuery元素过滤
  7. Windows服务的程序方面的资料
  8. java 转换int类型数值到对应的金额大写
  9. [html] 如何使用纯HTML实现跑马灯的效果?
  10. route add添加静态路由
  11. python在windows平台的多版本配置
  12. oopc——5.多态
  13. 一步一步写算法(之线性队列)
  14. php5.2、5.3和5.4,Apache多虚拟主机多版本PHP(5.2+5.3+5.4)共存运行配置
  15. Atitit data struts art 数据结构的艺术 数据结构之道 attilax著 目录 1. 分类 1 1.1. 按照元素关系分(集合,列表,tree,map,图) 1 1.2. 按
  16. NetBeans 时事通讯(刊号 # 108 - Jul 08, 2010)
  17. linux vi编译显示行号,Linux系统vi或者vim编辑器中如何显示行号
  18. 非模式物种ROSE超级增强子鉴定分析详解
  19. 计算机相关知识——前端Base64编码解码的基础使用
  20. 百果园APP产品迭代

热门文章

  1. linux标准i/o,Linux 标准I/O笔记
  2. java建一个conversion,Scala中的JavaConverters和JavaConversions有什么区别?
  3. python人工智能计算器_招募:基于python的召唤师全时段全技能(含均值AI)计算器全程测试...
  4. confluence统计用户文章_公众号流量主后台数据查看及统计分析
  5. PTA 基础编程题目集 7-19 支票面额 C语言
  6. php批量处理图片大小,word图片怎么批量调整大小
  7. SCheckbox_Struts2标签之Checkbox详解
  8. vue data数据修改_史上最强vue总结,万字长文
  9. [转帖]在SQL SERVER中实现RSA加密算法
  10. Firefox 多版本共存