Я пытаюсь выполнить задачу редактирования изображений в своей обучающей книге Python. Мне нужна помощь с горизонтальным переворотом.Flipping Images
Инструкции: Напишите функцию под названием «flip_horizontal», которая будет переворачивать изображение по горизонтали. То есть пиксель, расположенный на крайнем правом конце строки, заканчивается в крайнем левом углу строки и наоборот (не забудьте сохранить порядок RGB!).
Мой код не переворачивает изображение по горизонтали, когда я его открываю. Кроме того, как я могу писать свои эффекты для разных файлов (использовать исходный файл и применить одну функцию к исходному файлу и вывести его, а затем применить другую функцию к исходному файлу и вывести ее в другой файл). Пожалуйста, имейте в виду, что мне всего 11 лет, и я имею очень основное представление о Python и редактировании изображений, это просто мой интерес.
class PPM(object):
def __init__(self, infile, outfile):
self.infile=infile
self.outfile=outfile
#Read in data of image
data= open(self.infile,"r")
datain=data.read()
splits=datain.split()
#Header info
self.type=splits[0]
self.columns=splits[1]
self.row=splits[2]
self.colour=splits[3]
self.pixels=splits[4:]
def negate_red(self):
for b in range (0, (len(self.pixels)) , 3):
remainder=255-self.colour
def writetofile(self):
dataout= open(self.outfile,"w")
dataout.write(self.type +"\n" + self.columns + "\n" + self.row +"\n"+ self.colour +"\n"+ " ".join (self.pixels))
def grey_scale(self):
if int(self.columns) > 1000:
return "ERROR!! Number of columns is larger than what can be held in a buffer."
else:
for b in range(0, (len(self.pixels)) , 3):
sum = int(self.pixels[b]) + int(self.pixels[b+1]) + int(self.pixels[b+2])
avg = int(sum/3)
self.pixels[b] = str(avg)
self.pixels[b+1] = str(avg)
self.pixels[b+2] = str(avg)
def flatten_red(self):
for colour in range (0,len(self.pixels),3):
self.pixels [colour]=str(0)
#Create a 2d lists with the smaller lists containing the rgb values and append lists of lists
def horizontal_flip(self):
if int(self.columns) > 1000:
return "ERROR!! Number of columns is larger than what can be held in a buffer."
else:
temp_list = []
for b in range(int(self.row)):
column_list = []
column_list += self.pixels[0:int(self.columns) * 3]
self.pixels = self.pixels[int(self.columns) * 3 : ]
temp_list.append(column_list)
#print temp_list
new_list = []
for i in range(int(len(temp_list))):
new_list.append (temp_list[i][0])
new_list.append (temp_list[i][1])
new_list.append (temp_list[i][2])
temp_list[i] = temp_list[i][::-1]
sample= PPM("cake.ppm", "Replica.ppm")
sample.flatten_red()
sample.horizontal_flip()
sample.greyscale()
sample.negate_red()
Вы написали «Мой код ничего не делает, и делает переворачивать изображение по горизонтали, когда я открываю его.» Полагаю, вы имели в виду «* не * переворачивать изображение по горизонтали»? –
@ AdiInbar- Да, это то, что я имел в виду, - Извините, – user3192593
Хорошо, другая часть, о которой я смущен ... », а затем применить другую функцию к исходному файлу и вывести его в другой файл« ... кажется, что есть отсутствует "или" там, как в "исходном файле * или *"? –