起因

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

实现思路

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

这个图取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()

效果对比

总结

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

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

python绘制像素图_Python用61行代码实现图片像素化的示例代码相关推荐

  1. python淘宝抢购_Python 实现毫秒级淘宝抢购脚本的示例代码

    本篇文章主要介绍了Python 通过selenium实现毫秒级自动抢购的示例代码,通过扫码登录即可自动完成一系列操作,抢购时间精确至毫秒,可抢加购物车等待时间结算的,也可以抢聚划算的商品. 博主不提供 ...

  2. python绘制立体扇形_Python实现PS滤镜特效之扇形变换效果示例

    本文实例讲述了Python实现PS滤镜特效之扇形变换效果.分享给大家供大家参考,具体如下: 这里用 Python 实现 PS 滤镜中的一种几何变换特效,称为扇形变换,将图像扭曲成一个扇形,具体的算法原 ...

  3. python 列表自动排序_Python学习小技巧之列表项排序的示例代码分享

    这篇文章主要给大家介绍了Python学习小技巧之列表项排序的相关资料,文中介绍的非常详细,需要的朋友们可以参借鉴,下面跟着小编一起来学习学习吧. 本文介绍的是关于Python列表项排序的相关内容,分享 ...

  4. python抠图精确到发丝_Python用5行代码实现批量抠图的示例代码

    前言 对于会PhotoShop的人来说,抠图是非常简单的操作了,有时候几秒钟就能扣好一张图.不过一些比较复杂的图,有时候还是要画点时间的,今天就给大家带了一个非常快速简单的办法,用Python来批量抠 ...

  5. python抠图_Python用5行代码实现批量抠图的示例代码

    前言 对于会PhotoShop的人来说,抠图是非常简单的操作了,有时候几秒钟就能扣好一张图.不过一些比较复杂的图,有时候还是要画点时间的,今天就给大家带了一个非常快速简单的办法,用Python来批量抠 ...

  6. python实现杨辉三角思路_Python极简代码实现杨辉三角示例代码

    Python极简代码实现杨辉三角示例代码 杨辉三角,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列. 把每一行看做一个list,写一个generator,不断输出下一行的list ...

  7. php解析命令行参数选项,PHP 命令行参数解析工具类的示例代码

    PHP 命令行参数解析工具类的示例代码 /** * 命令行参数解析工具类 * @author guolinchao */ class CommandLine { // 临时记录短选项的选项值 priv ...

  8. 用python绘制正方形螺旋线_python绘制彩色螺旋线

    随着网络的发展,编程语言在人们的生活中无形的扮演着十分重要的角色.人们可以利用python做很多的事情,今天我就分享一个用python绘制彩色螺旋线的程序. 利用python交互式编程 所绘制的结果如 ...

  9. python绘制动点_Python asyncore / asynchat 基本传输实验 - Jacky Liu's Blog

    ---- 自从上回实验了 Python socket 的基本传输之后又受了些启发,于是想试试基于 non-blocking socket 的通信机制.Python 标准库里的 asynchat 自然是 ...

最新文章

  1. VS2015不显示工程文本信息
  2. 技术图文:双指针在求解算法题中的应用
  3. 电力系统分析课设短路电流计算simulink仿真
  4. 五年级计算机教材内容,五年级计算机教学计划
  5. HTML select控件
  6. Modem2G/3G/4G/5G:吐血总结:30分钟掌握高通modem RFFE driver(射频驱动)配置方法(一)
  7. android 镜像投屏开发,Android 投屏实现纪要
  8. PTCRB/GCF 认证测试问题总结
  9. 单例(Singleton)设计模式
  10. 专访递归神经网络之父:AI下一轮革命核心是“人工好奇心”
  11. 有赢有输---Kodu少儿编程第十一天
  12. 视觉SLAM(二):相机与图像
  13. Oracle EBS 付款后无法创建会计科目
  14. 五年级计算机课教什么东西,五年级信息技术下教案
  15. java word标签替换_JAVA实现替换WORD模板中的文字和图片
  16. stm32智能小车设计(1)——硬件选型思路
  17. 学习能力 什么是真正的学习
  18. Training: PHP LFI (Exploit, PHP, Training)
  19. install samba on crux without net.
  20. 2021-ICPC银川站赛后总结

热门文章

  1. 机器学习实战 决策树(附数据集)
  2. 如何给视频配上字幕?教你几种视频配字幕小妙招
  3. 卡罗拉更换变速油教程
  4. 怎么把pdf转换成excel转换器免费版
  5. 计算机中级改进的具体措施,改进职高计算机教学的几点措施
  6. 苹果电脑快捷锁屏的几种方法
  7. js移动手机号码验证
  8. 自动化一切!那些我每天使用的快捷自动化工作
  9. win10如何安装多个jdk并实时进行切换【建议收藏】
  10. MySQL系列11—简单优化