亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python用61行代碼實現圖片像素化的示例代碼

發布時間:2020-08-31 08:22:57 來源:腳本之家 閱讀:204 作者:北方 欄目:開發技術

起因

看到網上的像素圖片,感覺蠻有趣的,就打算用python一些PIL類庫寫一個。

Python用61行代碼實現圖片像素化的示例代碼

實現思路

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

Python用61行代碼實現圖片像素化的示例代碼

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

具體實現

from PIL import Image

def init():
  # 設置每個像素區塊的大小
  block_size = 75
  img = Image.open("a.jpg")
  # 獲取圖片的寬高
  width, height = img.size
  # 獲取像素點對應RGB顏色值,可以改變img_array中的值來改變顏色值
  img_array = img.load()
  # 為了處理最后的區塊,加了一次循環
  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):
      # 如果是最后一次循環,則x坐標等于width - 1
      if x == max_width - max_width % block_size - 1:
        x = width - 1
      # 如果是最后一次循環,則x坐標等于height - 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:\python\pixel_image\awesome_copy.png')
  img.show()

"""
:param x坐標 x: 
:param y坐標 y: 
:param 區塊大小 black_size: 
:param 可操作圖片數組 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())]
  # 將區塊內所有的顏色值設置為顏色最多的顏色
  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()

效果對比

Python用61行代碼實現圖片像素化的示例代碼

Python用61行代碼實現圖片像素化的示例代碼

總結

開源地址https://github.com/MasakiOvO/pixel_image

還有很多改進的地方,比如取色值的算法上,應該有更好的解決方法,應該用多進程來實現,這樣程序速度會快很多。OvO

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正蓝旗| 济阳县| 张掖市| 长春市| 涿州市| 电白县| 泾川县| 磴口县| 塔城市| 济南市| 郑州市| 和平县| 乐昌市| 崇信县| 准格尔旗| 历史| 博客| 山阳县| 报价| 中超| 闻喜县| 卢龙县| 建水县| 新田县| 正镶白旗| 尼勒克县| 铜梁县| 邯郸市| 明溪县| 寿阳县| 进贤县| 浪卡子县| 朔州市| 谷城县| 莫力| 莱州市| 开平市| 东兰县| 博乐市| 新河县| 高雄县|