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异常学习笔记
Feb 03 Python
浅谈numpy数组的几种排序方式
Dec 15 Python
python实现简单淘宝秒杀功能
May 03 Python
Python smtplib实现发送邮件功能
May 22 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
详解Python 数据库的Connection、Cursor两大对象
Jun 25 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 26 Python
python可以用哪些数据库
Jun 22 Python
Python使用sys.exc_info()方法获取异常信息
Jul 23 Python
Python实现学生管理系统(面向对象版)
Jun 24 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 gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
PHPExcel笔记, mpdf导出
2016/05/03 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
详解vue-router基本使用
2017/04/18 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
2019/04/25 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
vue实例的选项总结
2020/06/09 Javascript
python使用post提交数据到远程url的方法
2015/04/29 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
python实现狄克斯特拉算法
2019/01/17 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
Python unittest单元测试框架实现参数化
2020/04/29 Python
Python插件机制实现详解
2020/05/04 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
python中如何打包用户自定义模块
2020/09/23 Python
Django URL参数Template反向解析
2020/11/24 Python
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
数字漫画:comiXology
2020/06/13 全球购物
周年庆典邀请函范文
2014/01/24 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
供应链金融服务方案
2014/05/25 职场文书
大学生个人简历自我评价
2015/03/11 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS