Python用61行代码实现图片像素化的示例代码


Posted in Python onDecember 10, 2018

起因

看到网上的像素图片,感觉蛮有趣的,就打算用python一些PIL类库写一个。

Python用61行代码实现图片像素化的示例代码

实现思路

把一张图片分成多个块,每个块的颜色都等于这个色块中颜色最多的颜色,如下图。

Python用61行代码实现图片像素化的示例代码

这个图取2×2的像素为块的大小,把快中颜色与每个颜色出现的数量存放到字典里,取最大的颜色,填充整个块。

具体实现

from PIL import Image

def init():
  # 设置每个像素区块的大小
  block_size = 75
  img = Image.open("a.jpg")
  # 获取图片的宽高
  width, height = img.size
  # 获取像素点对应RGB颜色值,可以改变img_array中的值来改变颜色值
  img_array = img.load()
  # 为了处理最后的区块,加了一次循环
  max_width = width + block_size
  max_height = height + block_size
  for x in range(block_size - 1, max_width, block_size):
    for y in range(block_size - 1, max_height, block_size):
      # 如果是最后一次循环,则x坐标等于width - 1
      if x == max_width - max_width % block_size - 1:
        x = width - 1
      # 如果是最后一次循环,则x坐标等于height - 1
      if y == max_height - max_height % block_size - 1:
        y = height - 1
      # 改变每个区块的颜色值
      change_block(x, y, block_size, img_array)
      y += block_size
    x += block_size
  img.save(r'D:\python\pixel_image\awesome_copy.png')
  img.show()

"""
:param x坐标 x: 
:param y坐标 y: 
:param 区块大小 black_size: 
:param 可操作图片数组 img_array: 
"""
def change_block(x, y, black_size, img_array):

  color_dist = {}
  block_pos_list = []
  for pos_x in range(-black_size + 1, 1):
    for pos_y in range(-black_size + 1, 1):
      # todo print(x + pos_x,y + pos_y)
      block_pos_list.append([x + pos_x, y + pos_y])
  for pixel in block_pos_list:
    if not str(img_array[pixel[0], pixel[1]]) in color_dist.keys():
      color_dist[str(img_array[pixel[0], pixel[1]])] = 1
    else:
      color_dist[str(img_array[pixel[0], pixel[1]])] += 1
  # key-->value => value-->key
  new_dict = {v: k for k, v in color_dist.items()}
  max_color = new_dict[max(color_dist.values())]
  # 将区块内所有的颜色值设置为颜色最多的颜色
  for a in block_pos_list:
    img_array[a[0], a[1]] = tuple(list(map(int, max_color[1:len(max_color) - 1].split(","))))


def get_key(dict, value):
  return [k for k, v in dict.items() if v == value]


if __name__ == "__main__":
  init()

效果对比

Python用61行代码实现图片像素化的示例代码

Python用61行代码实现图片像素化的示例代码

总结

开源地址https://github.com/MasakiOvO/pixel_image

还有很多改进的地方,比如取色值的算法上,应该有更好的解决方法,应该用多进程来实现,这样程序速度会快很多。OvO

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中bisect的用法
Sep 23 Python
Python学习之asyncore模块用法实例教程
Sep 29 Python
如何解决django配置settings时遇到Could not import settings 'conf.local'
Nov 18 Python
Python用list或dict字段模式读取文件的方法
Jan 10 Python
python subprocess 杀掉全部派生的子进程方法
Jan 16 Python
Python3单行定义多个变量或赋值方法
Jul 12 Python
查看Python依赖包及其版本号信息的方法
Aug 13 Python
python实现超市商品销售管理系统
Nov 22 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 Python
详解在Python中使用Torchmoji将文本转换为表情符号
Jul 27 Python
Python基于gevent实现文件字符串查找器
Aug 11 Python
python Django框架快速入门教程(后台管理)
Jul 21 Python
Python从数据库读取大量数据批量写入文件的方法
Dec 10 #Python
对Python实现简单的API接口实例讲解
Dec 10 #Python
python中dir()与__dict__属性的区别浅析
Dec 10 #Python
python分块读取大数据,避免内存不足的方法
Dec 10 #Python
Python 文本文件内容批量抽取实例
Dec 10 #Python
Python中作用域的深入讲解
Dec 10 #Python
python实现根据文件关键字进行切分为多个文件的示例
Dec 10 #Python
You might like
PHP 魔术函数使用说明
2010/05/14 PHP
php 连接mysql连接被重置的解决方法
2011/02/15 PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
2012/07/31 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
PHP实现搜索相似图片
2015/09/22 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
学习并汇集javascript匿名函数
2010/11/25 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
Three.js基础部分学习
2017/01/08 Javascript
5 种JavaScript编码规范
2018/01/30 Javascript
JS处理一些简单计算题
2018/02/24 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
vue实现移动端省市区选择
2019/09/27 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
tornado+celery的简单使用详解
2019/12/21 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
2020/08/19 Python
中学教师实习自我鉴定
2013/09/28 职场文书
新郎父亲婚宴答谢词
2014/01/11 职场文书
大学生的自我鉴定范文
2014/01/21 职场文书
《中华少年》教学反思
2014/02/15 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
我的小天地教学反思
2014/04/30 职场文书
体育之星事迹材料
2014/05/11 职场文书
工地安全质量标语
2014/06/07 职场文书
公司市场专员岗位职责
2014/06/29 职场文书
依法行政工作汇报
2014/10/28 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
alibaba seata服务端具体实现
2022/02/24 Java/Android