像素风格是图片和视频这些媒体对象中一种比较有趣且独特的风格,而大家平常看到的图片都是很精细的,像素图则是有一种粗糙虚拟的美感。有些小伙伴就想要知道怎么将一个图片转为像素图,也就是实现图片像素化,下文有实际代码示例和步骤详解。

Python图片像素化如何实现?Python怎么将图片转为像素图

1.python中要对图像进行操作的话,大部分情况下都可以使用PIL库中Image模块,这次的示例也是使用的这个方法。而图片像素化的原理就是设置多个像素格,然后从图片内提取出颜色来填充像素格,像素格的大小就决定了像素图的精度。

那么首先就是要设置像素格大小并且读取图片,然后获取图片的宽高以及像素格对应的RGB颜色保存起来,代码如下:

from PIL import Image
block_size = 75
img = Image.open("a.jpg")
width, height = img.size
img_array = img.load()

2.在设置好了像素格大小并且得到图片的宽高和颜色等属性之后,就要定义一个函数来循环迭代的访问每一个像素格和颜色列表,来将像素格对应的图片颜色给填充进去。这些颜色都是从图片对应位置上取出来的,代码示例如下所示:

def init():
    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):
            if x == max_width - max_width % block_size - 1:
                x = width - 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:pythonpixel_imageawesome_copy.png')
      img.show()

3.像素格的颜色改变之后并不表示图片像素化已经完成了,这是因为一个像素块内可能会有多个不同的颜色,并且像素块的排列也是要层次不齐的。这一步就是要通过两个循环来将像素格位置和颜色分布进行调整,代码如下:

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):
            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
    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(","))))

4.最后只需要去调用这些写好的函数就可以了,因为是以模块化的风格来编写这个程序的代码,所以可以在任意需要使用的地方导入使用,代码如下所示:

def get_key(dict, value):
    return [k for k, v in dict.items() if v == value]
if __name__ == "__main__":
    init()

以上就是关于“Python图片像素化如何实现?Python怎么将图片转为像素图”的全部内容了,希望对你有所帮助。

更多python相关文章请访问分类:python

【版权声明】本文图文出自大盘站@dapan.cc,转载请注明出处!