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打开网页和暂停实例
Sep 30 Python
python去除所有html标签的方法
May 05 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
Nov 11 Python
python爬虫之xpath的基本使用详解
Apr 18 Python
详解Python3之数据指纹MD5校验与对比
Jun 11 Python
Python 运行.py文件和交互式运行代码的区别详解
Jul 02 Python
python实现随机加减法生成器
Feb 24 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
Mar 10 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
Jun 02 Python
Python中Yield的基本用法
Oct 18 Python
python 使用cycle构造无限循环迭代器
Dec 02 Python
python pygame 愤怒的小鸟游戏示例代码
Feb 25 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
Zerg建筑一览
2020/03/14 星际争霸
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
php 的反射详解及示例代码
2016/08/25 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
javascript常用对话框小集
2013/09/13 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
JavaScript中的函数重载深入理解
2014/08/04 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
详解React中传入组件的props改变时更新组件的几种实现方法
2018/09/13 Javascript
nodejs和react实现即时通讯简易聊天室功能
2019/08/21 NodeJs
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
Python中几个比较常见的名词解释
2015/07/04 Python
python按行读取文件,去掉每行的换行符\n的实例
2018/04/19 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
linux环境下Django的安装配置详解
2019/07/22 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
鱼油专家:Omegavia
2016/10/10 全球购物
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
机电一体化专业应届生求职信
2013/11/27 职场文书
初一生物教学反思
2014/01/18 职场文书
学生思想表现的评语
2014/01/30 职场文书
《识字五》教学反思
2014/03/01 职场文书
装修协议书范本
2014/04/21 职场文书
工程项目合作意向书
2015/05/08 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python