<>强起因强>
看到网上的像素图片,感觉蛮有趣的,就打算用python一些公益诉讼类库写一个。
<>强实现思路强>
把一张图片分成多个块,每个块的颜色都等于这个色块中颜色最多的颜色,如下图。
从公益诉讼导入图像 def init (): #设置每个像素区块的大小 block_size=75 img=Image.open (“a.jpg”) #获取图片的宽高 宽度,高度=img.size #获取像素点对应RGB颜色值,可以改变img_array中的值来改变颜色值 img_array=img.load () #为了处理最后的区块,加了一次循环 max_width=宽度+ block_size max_height=身高+ block_size x的范围(block_size - 1、max_width block_size): y的范围(block_size - 1、max_height block_size): #如果是最后一次循环,则x坐标等于宽度- 1 如果x==max_width - max_width % block_size - 1: x=宽度- 1 #如果是最后一次循环,则x坐标等于高度- 1 如果y==max_height - max_height % block_size - 1: y=身高- 1 #改变每个区块的颜色值 change_block (x, y, block_size img_array) y +=block_size x +=block_size python img.save (r想:\ \ pixel_image \ awesome_copy.png”) img.show () ”“” :param x坐标x: y: param y坐标: :param区块大小black_size: :param可操作图片数组img_array: ”“” def change_block (x, y, black_size img_array): color_dist={} block_pos_list=[] pos_x的范围(-black_size + 1, - 1): pos_y的范围(-black_size + 1, - 1): # todo打印(x + pos_x y + pos_y) block_pos_list。追加([x + pos_x y + pos_y]) 在block_pos_list像素: 如果不是str (img_array[[0],像素扫描[1]])在color_dist.keys (): color_dist (str (img_array[[0],像素扫描[1]]))=1 其他: color_dist (str (img_array[[0],像素扫描[1]]))+=1 #键,在value=https://www.yisu.com/zixun/>值- ->键 new_dict={v: k, k, v在color_dist.items ()} max_color=new_dict[马克斯(color_dist.values ())) #将区块内所有的颜色值设置为颜色最多的颜色 对于一个在block_pos_list: img_array[[0]、[1]]=元组(列表(map (int, max_color [1: len (max_color) - 1] .split (", ")))) def get_key (dict、价值): 返回(k, k v dict.items()如果v==值) if __name__==癬_main__”: init ()
效果对比
<强>总结强>
开源地址https://github.com/MasakiOvO/pixel_image
还有很多改进的地方,比如取色值的算法上,应该有更好的解决方法,应该用多进程来实现,这样程序速度会快很多.OvO
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。