欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python用61行代碼實(shí)現(xiàn)圖片像素化的示例代碼

 更新時(shí)間:2018年12月10日 11:21:37   作者:北方  
這篇文章主要介紹了Python用61行代碼實(shí)現(xiàn)圖片像素化的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

起因

看到網(wǎng)上的像素圖片,感覺(jué)蠻有趣的,就打算用python一些PIL類庫(kù)寫一個(gè)。

實(shí)現(xiàn)思路

把一張圖片分成多個(gè)塊,每個(gè)塊的顏色都等于這個(gè)色塊中顏色最多的顏色,如下圖。


這個(gè)圖取2×2的像素為塊的大小,把快中顏色與每個(gè)顏色出現(xiàn)的數(shù)量存放到字典里,取最大的顏色,填充整個(gè)塊。

具體實(shí)現(xiàn)

from PIL import Image

def init():
  # 設(shè)置每個(gè)像素區(qū)塊的大小
  block_size = 75
  img = Image.open("a.jpg")
  # 獲取圖片的寬高
  width, height = img.size
  # 獲取像素點(diǎn)對(duì)應(yīng)RGB顏色值,可以改變img_array中的值來(lái)改變顏色值
  img_array = img.load()
  # 為了處理最后的區(qū)塊,加了一次循環(huán)
  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):
      # 如果是最后一次循環(huán),則x坐標(biāo)等于width - 1
      if x == max_width - max_width % block_size - 1:
        x = width - 1
      # 如果是最后一次循環(huán),則x坐標(biāo)等于height - 1
      if y == max_height - max_height % block_size - 1:
        y = height - 1
      # 改變每個(gè)區(qū)塊的顏色值
      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坐標(biāo) x: 
:param y坐標(biāo) y: 
:param 區(qū)塊大小 black_size: 
:param 可操作圖片數(shù)組 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())]
  # 將區(qū)塊內(nèi)所有的顏色值設(shè)置為顏色最多的顏色
  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()

效果對(duì)比


總結(jié)

開(kāi)源地址https://github.com/MasakiOvO/pixel_image

還有很多改進(jìn)的地方,比如取色值的算法上,應(yīng)該有更好的解決方法,應(yīng)該用多進(jìn)程來(lái)實(shí)現(xiàn),這樣程序速度會(huì)快很多。OvO

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論