Skip to content

Instantly share code, notes, and snippets.

@rupython
Created March 2, 2019 19:01
Show Gist options
  • Select an option

  • Save rupython/7fb971d358900a1312ef9d0c9148ef8c to your computer and use it in GitHub Desktop.

Select an option

Save rupython/7fb971d358900a1312ef9d0c9148ef8c to your computer and use it in GitHub Desktop.
From: UNI WOW
from PIL import Image
from PIL import ImageDraw
''' Находиn самый большой элемент списка(в нашем случае - каких цветов больше)'''
def my_max(iterable):
it = iter(iterable) # получаем итератор
try:
max_ = next(it) # получаем первый элемент
except StopIteration: # пустой ввод -- нет элементов
raise ValueError('max() arg has no items')
for item in it: # для каждого из оставшихся элементов
if max_ < item: # если элемент больше,
max_ = item # он становится новым максимумом
return max_
palettedata = [191,116,202,208,149,228,222,179,235,145,41,52,195,92,118,225,148,157,243,198,208,207,91,82,121,48,34,175,76,33,114,97,50,143,124,64,172,161,104,87,66,57,142,130,113,172,157,141,195,190,186,83,56,51,163,133,107,220,197,185,190,15,43,144,99,126,181,142,175,187,139,88,209,178,108,228,212,150,92,90,53,128,132,89,150,153,105,207,128,108,229,207,7,207,206,199,236,227,140,206,29,83,42,38,40,58,65,107,66,84,139,145,64,89,199,107,157,103,96,111,157,151,172,50,77,52,99,136,93,202,5,32,94,119,181,200,16,58,124,47,119,161,184,221,243,143,182,223,70,85,116,65,169,110,136,185,244,80,77,244,124,127,61,85,44,93,116,58,108,133,70,158,178,96,234,68,128,207,45,106,236,138,183,59,55,96,82,93,65,105,126,89,138,151,98,57,47,48,153,129,212,164,163,214,216,36,50,206,8,43,233,66,65,241,93,91,245,144,137,246,187,176,174,48,48,215,63,151,239,122,199,242,152,219,78,116,77,135,166,118,158,42,91,202,64,125,241,162,203,241,162,203,182,208,163,156,127,72,240,50,93,248,83,139,195,9,28,156,130,74,235,95,110,246,187,205,244,145,193,175,155,103,166,58,73,183,78,98,159,80,105,215,140,177,217,67,130,235,106,159,125,78,99,206,179,207,129,92,187,198,193,229,56,67,97,169,186,209,191,206,224,137,166,207,220,228,234,90,134,171,172,211,222,60,109,142,135,187,198,95,115,120,246,224,207,174,96,90,212,139,128,239,197,182,214,104,52,156,35,45,223,116,106,240,168,161,109,74,60,185,154,132,108,90,79,131,99,83,76,65,71,243,29,72,127,47,76,158,42,91,218,15,116,236,85,167,109,102,170,46,92,90,59,114,123,87,144,154,171,212,212,18,154,106,157,187,176,62,142,108,86,133,102,112,158,133,149,184,164,16,97,43,191,193,24,222,161,29,228,180,53,239,202,91,238,223,174,245,142,145,243,150,113,179,84,40,229,155,94,188,131,76,174,109,44,197,69,63,205,36,75,229,52,106,237,89,138,120,48,101,155,80,142,192,119,178,142,50,164,109,105,189,130,132,206,168,183,233,184,203,225,60,87,134,19,127,202,7,146,178,11,182,211,55,200,225,42,108,89,68,141,122,101,166,150,13,148,80,76,184,126,207,136,14,225,106,37,238,145,74,241,194,125,238,172,127,125,50,48,148,69,71,198,114,108,139,91,100,167,123,133,136,89,71,159,109,92,194,151,137,248,247,245,229,215,209,147,53,28,235,138,95,199,124,118,86,82,91,124,114,134,180,175,193,162,100,54,208,160,100,125,63,46,158,81,48,185,110,55,208,140,84,218,159,108,225,181,7,231,232,89,147,116,125,182,149,162,205,183,186,86,100,42,116,133,44,132,143,72,174,185,96,184,15,40,48,67,58,76,107,95,104,139,124,135,171,159,179,209,193,76,110,163,104,154,179,145,185,210,74,91,69,129,140,115,150,156,129,161,164,135,93,86,87,229,197,188,96,25,97,150,55,157,170,78,176,212,135,210,59,107,85,90,148,101,135,193,147,160,209,166,92,99,38,123,137,43,113,167,173,151,198,197,209,6,88,225,7,109,234,32,132,241,76,163,242,119,191,245,153,213,225,2,14,242,5,40,114,86,64,143,106,78,174,141,100,207,184,160,146,69,62,139,113,90,160,139,116]
# Открываем изображение
oldimage = Image.open("тест.jpg")
# Создаем новое изображение(копию)
palimage = Image.new('P', oldimage.size)
# Применяем палитру
palimage.putpalette(palettedata)
# Применяем палитру к изображению
newimage = oldimage.quantize(palette=palimage)
# Конвертируем изображение в РГБ
convert_image = newimage.convert("RGB")
# Запускаем модуль рисования по нашей фотографии
draw = ImageDraw.Draw(convert_image)
'''до'''
gird_x = 0
gird_y = 0
calc = 0
calc_y = gird_y+10 # Здесь перемножаемое значение, стояло 9 исправил на 10
rgb_list = []
zzzzz = 0
while gird_x < 1280:
while gird_y <= calc_y:
# Получаем цвет пикселя из координат
z = convert_image.getpixel((gird_x, gird_y))
# Проверяем как все работает
print(str(z) + " Это цвет полученный с координат(39 строка)")
# Добавляем полученный цвет в конец списка
rgb_list.append(z)
# Переходим в след пиксель
gird_x = gird_x + 1
zzzzz = zzzzz + 1
print(str(zzzzz) + " Номер пикселя с которого считываем цвет(46 строка - просто счетчик)")
# Если достигли последнего пикселя в строке
if gird_x >= calc+9:
# переходим на следующую строку
gird_y += 1
# возвращаем курсор на начало строки
gird_x = calc
calc = calc +10
# Удаляем дубликаты цветов из списка
sorted_list = list(set(rgb_list))
print(str(sorted_list) + " Это сортированный список цветов")
len_points = len(sorted_list)
# Выдаем результат подсчета цветов
print(str(len_points) + " Длина списка сортированных цветов")
'''Сортируем 10х10 пикселей, определяем все цвета'''
# Создаем пустой список
tenxten = []
# Создаем переменную для цикла
point = 0
while point < len_points:
print(str(sorted_list[point]) + " - " + str(rgb_list.count(sorted_list[point])) + " шт. Сколько цветов в 100 пикселях")
z = int(rgb_list.count(sorted_list[point]))
print(str(z) + " Количество цветов")
tenxten.append(z)
point = point + 1
print("\n \n \n \n " + str(tenxten) + " Сисок для нахождения нужного(максимального) цвета")
# Запускаем функцию определения наибольшего к-ва цветов
maximum = my_max(tenxten)
print(str(maximum) + " Максимальное значение из всех посчитаных цветов")
# Узнаем элемент с максимальным количеством цветов
num_max = tenxten.index(maximum)
color = (sorted_list[num_max])
# Отрисовка квадрата (х.у) (старт,стоп) fill=цвет квадрата outline= цвет границ квадрата
draw.rectangle(((gird_x, gird_y), (gird_x + 10, gird_y-10)), fill=color, outline="red" )
gird_x = gird_x +10
if calc == 1280:
gird_y = gird_y +10
convert_image.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment