像素风格是图片和视频这些媒体对象中一种比较有趣且独特的风格,而大家平常看到的图片都是很精细的,像素图则是有一种粗糙虚拟的美感。有些小伙伴就想要知道怎么将一个图片转为像素图,也就是实现图片像素化,下文有实际代码示例和步骤详解。
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,转载请注明出处!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。