From 5ddc6ad525697b7fad4ec157139a8898726d5928 Mon Sep 17 00:00:00 2001 From: ARTYOM ARAKELOV Date: Sat, 13 Nov 2021 12:01:55 +0500 Subject: [PATCH 1/4] part 1 --- filter.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/filter.py b/filter.py index 4150df2..5862a71 100644 --- a/filter.py +++ b/filter.py @@ -5,23 +5,23 @@ a = len(arr) a1 = len(arr[1]) i = 0 -while i < a - 11: +while i < a - 9: j = 0 - while j < a1 - 11: + while j < a1 - 9: s = 0 - for n in range(i, i + 10): - for n1 in range(j, j + 10): - n1 = arr[n][n1][0] - n2 = arr[n][n1][1] - n3 = arr[n][n1][2] + for x in range(i, i + 10): + for y in range(j, j + 10): + n1 = int(arr[x][y][0]) + n2 = int(arr[x][y][1]) + n3 = int(arr[x][y][2]) M = n1 + n2 + n3 - s += M + s += M / 3 s = int(s // 100) - for n in range(i, i + 10): - for n1 in range(j, j + 10): - arr[n][n1][0] = int(s // 50) * 50 - arr[n][n1][1] = int(s // 50) * 50 - arr[n][n1][2] = int(s // 50) * 50 + for x in range(i, i + 10): + for y in range(j, j + 10): + arr[x][y][0] = int(s // 50) * 50 + arr[x][y][1] = int(s // 50) * 50 + arr[x][y][2] = int(s // 50) * 50 j = j + 10 i = i + 10 res = Image.fromarray(arr) From a938868284c804b1681b9ab1fb6a6d7dcd0981f1 Mon Sep 17 00:00:00 2001 From: ARTYOM ARAKELOV Date: Sat, 13 Nov 2021 12:03:43 +0500 Subject: [PATCH 2/4] part 2 --- filter.py | 55 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/filter.py b/filter.py index 5862a71..77b3ed4 100644 --- a/filter.py +++ b/filter.py @@ -1,28 +1,35 @@ from PIL import Image import numpy as np + + +def convert_to_pixelart(image, chunk_size=10, grey_gradation=5): + arr = np.array(image) + gradient = chunk_size * grey_gradation + width = len(arr) + height = len(arr[1]) + for i in range(0, width - chunk_size + 1, chunk_size): + for j in range(0, height - chunk_size + 1, chunk_size): + grey = count_grey(arr, chunk_size, i, j) + for x in range(i, i + chunk_size): + for y in range(j, j + chunk_size): + local_grey = int(grey // gradient) * gradient + arr[x][y][0] = local_grey + arr[x][y][1] = local_grey + arr[x][y][2] = local_grey + return arr + + +def count_grey(arr, chunk_size, i, j): + grey = 0 + for x in range(i, i + chunk_size): + for y in range(j, j + chunk_size): + red = int(arr[x][y][0]) + green = int(arr[x][y][1]) + blue = int(arr[x][y][2]) + grey += (red + green + blue) / 3 + return int(grey // chunk_size ** 2) + + img = Image.open("img2.jpg") -arr = np.array(img) -a = len(arr) -a1 = len(arr[1]) -i = 0 -while i < a - 9: - j = 0 - while j < a1 - 9: - s = 0 - for x in range(i, i + 10): - for y in range(j, j + 10): - n1 = int(arr[x][y][0]) - n2 = int(arr[x][y][1]) - n3 = int(arr[x][y][2]) - M = n1 + n2 + n3 - s += M / 3 - s = int(s // 100) - for x in range(i, i + 10): - for y in range(j, j + 10): - arr[x][y][0] = int(s // 50) * 50 - arr[x][y][1] = int(s // 50) * 50 - arr[x][y][2] = int(s // 50) * 50 - j = j + 10 - i = i + 10 -res = Image.fromarray(arr) +res = Image.fromarray(convert_to_pixelart(img)) res.save('res.jpg') From cd59dfba58b8d8c107c0983c529b7faef793bb57 Mon Sep 17 00:00:00 2001 From: ARTYOM ARAKELOV Date: Sat, 13 Nov 2021 12:04:58 +0500 Subject: [PATCH 3/4] part 3 --- filter.py | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/filter.py b/filter.py index 77b3ed4..2e5406a 100644 --- a/filter.py +++ b/filter.py @@ -5,31 +5,14 @@ def convert_to_pixelart(image, chunk_size=10, grey_gradation=5): arr = np.array(image) gradient = chunk_size * grey_gradation - width = len(arr) - height = len(arr[1]) - for i in range(0, width - chunk_size + 1, chunk_size): - for j in range(0, height - chunk_size + 1, chunk_size): - grey = count_grey(arr, chunk_size, i, j) - for x in range(i, i + chunk_size): - for y in range(j, j + chunk_size): - local_grey = int(grey // gradient) * gradient - arr[x][y][0] = local_grey - arr[x][y][1] = local_grey - arr[x][y][2] = local_grey + for x in range(0, arr.shape[0], chunk_size): + for y in range(0, arr.shape[1], chunk_size): + grey = sum(map(lambda n: int(n) / 3, arr[x:x + chunk_size, y:y + chunk_size].flatten())) + grey = int(grey / chunk_size ** 2 // gradient) * gradient + arr[x:x + chunk_size, y:y + chunk_size] = grey return arr -def count_grey(arr, chunk_size, i, j): - grey = 0 - for x in range(i, i + chunk_size): - for y in range(j, j + chunk_size): - red = int(arr[x][y][0]) - green = int(arr[x][y][1]) - blue = int(arr[x][y][2]) - grey += (red + green + blue) / 3 - return int(grey // chunk_size ** 2) - - img = Image.open("img2.jpg") res = Image.fromarray(convert_to_pixelart(img)) res.save('res.jpg') From 027e76002d2a6b777bca1cd8f840a5e09c2c3fb7 Mon Sep 17 00:00:00 2001 From: ARTYOM ARAKELOV Date: Sat, 13 Nov 2021 12:05:39 +0500 Subject: [PATCH 4/4] part 4 --- filter.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/filter.py b/filter.py index 2e5406a..4593807 100644 --- a/filter.py +++ b/filter.py @@ -13,6 +13,15 @@ def convert_to_pixelart(image, chunk_size=10, grey_gradation=5): return arr -img = Image.open("img2.jpg") -res = Image.fromarray(convert_to_pixelart(img)) +mage_name = input("Введите название файла изображения: ") + +mosaic = input("Введите размер мозайки(или нажмите Ввод для значения по-умолчанию - 10): ") +mosaic = int(mosaic) if mosaic else 10 + +gradation = input("Введите шаг градации(или нажмите Ввод для значения по-умолчанию - 5): ") +gradation = int(gradation) if gradation else 5 + +img = Image.open(image_name) +res = Image.fromarray(convert_to_pixelart(img, mosaic, gradation)) res.save('res.jpg') +print("Результат сохранён как res.jpg")