Как стать автором
Обновить

Python — средний цвет

Резко пришла идея написать программу, для распознавания среднего цвета на фотографиях.

Код был написан буквально за 15 минут, так что, если нашли какие то минусы, то пишите, исправлю.

Суть программы: на выход дать средний цвет и фото out.jpg

Пусть входное фото:

in.jpg
in.jpg

Тогда при запуске программы, мы вводим его имя с расширением, и получаем rgb и hex для среднего цвета, и цвета фона:

Цвет фона используется дальше, для выходного изображения, он на 10 единиц темнее среднего:

out.jpg
out.jpg

Для написания кода использовал библиотеку PIL:

from PIL import Image

print('Перед вводом названия файла перекиньте его в папку с программой')
print('Примечание: программа плохо работает с форматом .png')
picture_name = str(input('Введите название фото с его расширением: '))

try:
	img = Image.open(picture_name) #Файл для перебора
	obj_for_count = img.load()
	
	f = open(picture_name, "rb") #Файл для размера
	img_for_size = Image.open(f) 
	
	
	sq = [0, 0, 0] #Массив для общего подсчета
	count = img_for_size.size[0] * img_for_size.size[1] #Ширина * Высота
	
	width = img_for_size.size[0] #Ширина
	height = img_for_size.size[1] #Высота

	f.close
	
	for i in range(width): #Цикл по ширине
		for j in range(height): #Цикл по высоте
			sq[0] += obj_for_count[i, j][0] #r
			sq[1] += obj_for_count[i, j][1] #g
			sq[2] += obj_for_count[i, j][2] #b
	
	
	out = [0, 0, 0] #Массив для средних значений
	
	out[0] = int(sq[0]/count) #Средние значения
	out[1] = int(sq[1]/count)
	out[2] = int(sq[2]/count)

	print(f'Средний цвет: rgb({out[0]}, {out[1]}, {out[2]})')
	hexed = '#' + format(out[0], 'x') + format(out[1], 'x') + format(out[2], 'x') #Перевод в HEX
	print(f'hex: {hexed}')

	for i in range(len(out)): #Делаю цвет фона на 10 пунктов темнее 
		if out[i] <= 10:
			out[i] = 0
		else:
			out[i] -= 10
	
	print(f'Цвет фона: rgb({out[0]}, {out[1]}, {out[2]})')
	hexed = '#' + format(out[0], 'x') + format(out[1], 'x') + format(out[2], 'x') #Перевод в HEX
	print(f'hex: {hexed}')

	img_for_out = Image.new("RGB", (int(width*1.5), int(height*1.5)), (out[0], out[1], out[2])) #Создание файла widthхheight с фоном среднего цвета

	img_for_out.paste(img, (int(width/4), int(height/4)))
	img.close

	img_for_out.save('out.jpg') #Запись файла в папку
	img_for_out.show() #Показ файла
	img_for_out.close
except:
	print('ERROR: Файл не найден')

Программа плохо работает с форматом .png:

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.