python绘制像素图_Python用61行代码实现图片像素化的示例代码
起因
看到网上的像素图片,感觉蛮有趣的,就打算用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行代码实现图片像素化的示例代码相关推荐
- python淘宝抢购_Python 实现毫秒级淘宝抢购脚本的示例代码
本篇文章主要介绍了Python 通过selenium实现毫秒级自动抢购的示例代码,通过扫码登录即可自动完成一系列操作,抢购时间精确至毫秒,可抢加购物车等待时间结算的,也可以抢聚划算的商品. 博主不提供 ...
- python绘制立体扇形_Python实现PS滤镜特效之扇形变换效果示例
本文实例讲述了Python实现PS滤镜特效之扇形变换效果.分享给大家供大家参考,具体如下: 这里用 Python 实现 PS 滤镜中的一种几何变换特效,称为扇形变换,将图像扭曲成一个扇形,具体的算法原 ...
- python 列表自动排序_Python学习小技巧之列表项排序的示例代码分享
这篇文章主要给大家介绍了Python学习小技巧之列表项排序的相关资料,文中介绍的非常详细,需要的朋友们可以参借鉴,下面跟着小编一起来学习学习吧. 本文介绍的是关于Python列表项排序的相关内容,分享 ...
- python抠图精确到发丝_Python用5行代码实现批量抠图的示例代码
前言 对于会PhotoShop的人来说,抠图是非常简单的操作了,有时候几秒钟就能扣好一张图.不过一些比较复杂的图,有时候还是要画点时间的,今天就给大家带了一个非常快速简单的办法,用Python来批量抠 ...
- python抠图_Python用5行代码实现批量抠图的示例代码
前言 对于会PhotoShop的人来说,抠图是非常简单的操作了,有时候几秒钟就能扣好一张图.不过一些比较复杂的图,有时候还是要画点时间的,今天就给大家带了一个非常快速简单的办法,用Python来批量抠 ...
- python实现杨辉三角思路_Python极简代码实现杨辉三角示例代码
Python极简代码实现杨辉三角示例代码 杨辉三角,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列. 把每一行看做一个list,写一个generator,不断输出下一行的list ...
- php解析命令行参数选项,PHP 命令行参数解析工具类的示例代码
PHP 命令行参数解析工具类的示例代码 /** * 命令行参数解析工具类 * @author guolinchao */ class CommandLine { // 临时记录短选项的选项值 priv ...
- 用python绘制正方形螺旋线_python绘制彩色螺旋线
随着网络的发展,编程语言在人们的生活中无形的扮演着十分重要的角色.人们可以利用python做很多的事情,今天我就分享一个用python绘制彩色螺旋线的程序. 利用python交互式编程 所绘制的结果如 ...
- python绘制动点_Python asyncore / asynchat 基本传输实验 - Jacky Liu's Blog
---- 自从上回实验了 Python socket 的基本传输之后又受了些启发,于是想试试基于 non-blocking socket 的通信机制.Python 标准库里的 asynchat 自然是 ...
最新文章
- VS2015不显示工程文本信息
- 技术图文:双指针在求解算法题中的应用
- 电力系统分析课设短路电流计算simulink仿真
- 五年级计算机教材内容,五年级计算机教学计划
- HTML select控件
- Modem2G/3G/4G/5G:吐血总结:30分钟掌握高通modem RFFE driver(射频驱动)配置方法(一)
- android 镜像投屏开发,Android 投屏实现纪要
- PTCRB/GCF 认证测试问题总结
- 单例(Singleton)设计模式
- 专访递归神经网络之父:AI下一轮革命核心是“人工好奇心”
- 有赢有输---Kodu少儿编程第十一天
- 视觉SLAM(二):相机与图像
- Oracle EBS 付款后无法创建会计科目
- 五年级计算机课教什么东西,五年级信息技术下教案
- java word标签替换_JAVA实现替换WORD模板中的文字和图片
- stm32智能小车设计(1)——硬件选型思路
- 学习能力 什么是真正的学习
- Training: PHP LFI (Exploit, PHP, Training)
- install samba on crux without net.
- 2021-ICPC银川站赛后总结