用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - python代码库

像素化头像生成源码

2022-10-26 作者: Python自学举报

[python]代码库

思路

其实这是马赛克的算法,新建图像board,宽高取整

以像素块block作为步进分别生成每行每列的新像素块

每个新像素块的颜色取像素区块内出现最多的颜色

新像素块偏移1像素留黑边

像素块贴到新建图像board上

源码比较简单


from PIL import Image
import collections

pic = Image.open("img1.jpg").convert("RGB")
width, height = pic.size
block = 10  # 小格子大小,数字越大像素粒越大

board = Image.new("RGB", (width // block * block, height // block * block))  # 新图片宽高取整
for y in range(0, height, block):  # 行
    for x in range(0, width, block):  # 列
        temp = pic.crop((x, y, x + block, y + block))  # 截取block * block区块图像
        temp_list = list(temp.getdata())  # 获取像素序列并转为普通序列
        max_color = collections.Counter(temp_list).most_common()[0][0]  # 计算像素块颜色,取最多出现的一个颜色
        temp_past = Image.new("RGB", (block - 1, block - 1), max_color)  # 错开1像素 制作黑边效果
        # temp_past = Image.new("RGB", (block, block), max_color) # 像素块无边框
        board.paste(temp_past, (x, y))
        x = x + block  # 跳过无用计算
    y = y + block  # 跳过无用计算
board.show()




用到的库

PIL Python 图像处理库

图像处理工具包 PIL (Python Image Library), 该软件包提供了基本的图像处理功能,如:改变图像大小,旋转图像,图像格式转换,色场空间转换,图像增强,直方图处理,插值和滤波等等。

常用方法
# 读取图片
im=Image.open('/test.jpg')

# 显示图片
im.show()

# 保存图片
im.save("image.gif","GIF") 

# 创建新图片
Image.new(mode,size)
Image.new(mode,size,color)
newImg = Image.new("RGBA",(640,480),(0,255,0))
newImg.save("newImg.png","PNG")

# 设置要裁剪的区域
region=im.crop(box) #region是一个新的图像对象。

# 改变图像的大小:
out=img.resize((128,128))


Python标准库collections

功能:

计数器(counter)

有序字典(orderedDict)

默认字典(defaultdict)

可命名元组(namedtuple)

双向队列(deque)

import collections
x = 'asadadawdsdasdawdasdawdawdawedwqdfrgfdrgrthrhr'
collections.Counter(x)
# 返回值:
# Counter({'d': 12, 'a': 10, 'w': 6, 'r': 5, 's': 4, 'f': 2, 'g': 2, 'h': 2, 'e': 1, 'q': 1, 't': 1})  #默认从大到小排序
collections.Counter(x).most_common() # 获取最大值
这里我们用来计算一个区域内,按颜色分组,出现次数最多的像素点

max_color = collections.Counter(temp_list).most_common()[0][0]  # 计算像素块颜色,取最多出现的一个颜色

[代码运行效果截图]


像素化头像生成源码


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...