From 7f0078ceb4d21d59fbde555f50036c05b0500805 Mon Sep 17 00:00:00 2001 From: idefant Date: Mon, 15 Nov 2021 20:38:56 +0500 Subject: [PATCH 1/4] step 1 --- filter.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/filter.py b/filter.py index 4150df2..ff9857d 100644 --- a/filter.py +++ b/filter.py @@ -1,27 +1,28 @@ from PIL import Image import numpy as np + img = Image.open("img2.jpg") arr = np.array(img) a = len(arr) a1 = len(arr[1]) i = 0 -while i < a - 11: +while i < a - 1: j = 0 - while j < a1 - 11: + while j < a1 - 1: 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 = arr[x][y][0] / 3 + n2 = arr[x][y][1] / 3 + n3 = arr[x][y][2] / 3 M = n1 + n2 + n3 s += M 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 3a2cb386daa37bb7534420f3a2cee30227390882 Mon Sep 17 00:00:00 2001 From: idefant Date: Tue, 16 Nov 2021 08:39:14 +0500 Subject: [PATCH 2/4] step 2 --- filter.py | 64 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/filter.py b/filter.py index ff9857d..4170aad 100644 --- a/filter.py +++ b/filter.py @@ -1,29 +1,45 @@ from PIL import Image import numpy as np -img = Image.open("img2.jpg") -arr = np.array(img) -a = len(arr) -a1 = len(arr[1]) -i = 0 -while i < a - 1: - j = 0 - while j < a1 - 1: - s = 0 - for x in range(i, i + 10): - for y in range(j, j + 10): - n1 = arr[x][y][0] / 3 - n2 = arr[x][y][1] / 3 - n3 = arr[x][y][2] / 3 - M = n1 + n2 + n3 - s += M - 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 + +def get_average_shade_gray(arr, i, j, pixel_size): + s = 0 + for x in range(i, i + pixel_size): + for y in range(j, j + pixel_size): + n1 = arr[x][y][0] / 3 + n2 = arr[x][y][1] / 3 + n3 = arr[x][y][2] / 3 + M = n1 + n2 + n3 + s += M + return s + + +def set_color(arr, i, j, s, pixel_size, gradation_step): + for x in range(i, i + pixel_size): + for y in range(j, j + pixel_size): + arr[x][y][0] = int(s // gradation_step) * gradation_step + arr[x][y][1] = int(s // gradation_step) * gradation_step + arr[x][y][2] = int(s // gradation_step) * gradation_step + + +def image_to_pixelart(filename, pixel_size, gradation_step): + img = Image.open(filename) + arr = np.array(img) + height = len(arr) + width = len(arr[1]) + i = 0 + while i < height - 1: + j = 0 + while j < width - 1: + s = get_average_shade_gray(arr, i, j, pixel_size) + s = int(s // pixel_size ** 2) + set_color(arr, i, j, s, pixel_size, gradation_step) + j = j + pixel_size + i = i + pixel_size + return arr + + +arr = image_to_pixelart('img2.jpg', 10, 50) + res = Image.fromarray(arr) res.save('res.jpg') From 3f0962ebc77e7b767690616c1ee5e54a75a1dd8d Mon Sep 17 00:00:00 2001 From: idefant Date: Tue, 16 Nov 2021 09:08:07 +0500 Subject: [PATCH 3/4] step 3 --- filter.py | 35 ++++++----------------------------- 1 file changed, 6 insertions(+), 29 deletions(-) diff --git a/filter.py b/filter.py index 4170aad..477891f 100644 --- a/filter.py +++ b/filter.py @@ -2,40 +2,17 @@ import numpy as np -def get_average_shade_gray(arr, i, j, pixel_size): - s = 0 - for x in range(i, i + pixel_size): - for y in range(j, j + pixel_size): - n1 = arr[x][y][0] / 3 - n2 = arr[x][y][1] / 3 - n3 = arr[x][y][2] / 3 - M = n1 + n2 + n3 - s += M - return s - - -def set_color(arr, i, j, s, pixel_size, gradation_step): - for x in range(i, i + pixel_size): - for y in range(j, j + pixel_size): - arr[x][y][0] = int(s // gradation_step) * gradation_step - arr[x][y][1] = int(s // gradation_step) * gradation_step - arr[x][y][2] = int(s // gradation_step) * gradation_step - - def image_to_pixelart(filename, pixel_size, gradation_step): img = Image.open(filename) arr = np.array(img) height = len(arr) width = len(arr[1]) - i = 0 - while i < height - 1: - j = 0 - while j < width - 1: - s = get_average_shade_gray(arr, i, j, pixel_size) - s = int(s // pixel_size ** 2) - set_color(arr, i, j, s, pixel_size, gradation_step) - j = j + pixel_size - i = i + pixel_size + + for x in range(0, width, pixel_size): + for y in range(0, height, pixel_size): + sum_pixels_color = sum(map(lambda n: int(n) / 3, arr[y:y + pixel_size, x:x + pixel_size].flatten())) + monochrome_color = int(sum_pixels_color / pixel_size ** 2 // gradation_step) * gradation_step + arr[y:y + pixel_size, x:x + pixel_size] = monochrome_color return arr From 9993d15e91d03f7613877a747f7a43990fa89a39 Mon Sep 17 00:00:00 2001 From: idefant Date: Tue, 16 Nov 2021 11:13:24 +0500 Subject: [PATCH 4/4] step 4 --- filter.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/filter.py b/filter.py index 477891f..c9eb72e 100644 --- a/filter.py +++ b/filter.py @@ -16,7 +16,14 @@ def image_to_pixelart(filename, pixel_size, gradation_step): return arr -arr = image_to_pixelart('img2.jpg', 10, 50) +filename = input('Image filename: ') +result_filename = input('Result image filename: ') +pixel_size = input("Pixel size (by default: 10): ") +pixel_size = int(pixel_size) if pixel_size else 10 +gradation_step = input("Gradation step (by default 50): ") +gradation_step = int(gradation_step) if gradation_step else 50 + +arr = image_to_pixelart(filename, pixel_size, gradation_step) res = Image.fromarray(arr) -res.save('res.jpg') +res.save(result_filename)