Bildverarbeitung
Das Portable Anymap Bildformat
Das Portable Anymap Bildformat gibt es in drei Versionen. Diese Bilder lassen sich mit einem Texteditor erstellen. Jedes Bildformat beginnt mit einer „magischen Zahl“ zur Identifizierung des Bildtyps, gefolgt von der Auflösung des Bildes und evtl. der Anzahl der Grau-, bzw. der Farbstufen. Die drei Bildarten lassen sich so definieren:
Schwarz-Weiß Bild
P1
11 7
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0
Dieses Bild stell ein schwarzes T auf weißem Hintergrund dar.
Graustufenbild
P2
11 7
15
15 15 15 15 15 15 15 15 15 15 15
0 0 0 0 0 13 0 0 0 0 0
0 0 0 0 0 11 0 0 0 0 0
0 0 0 0 0 9 0 0 0 0 0
0 0 0 0 0 8 0 0 0 0 0
0 0 0 0 0 6 0 0 0 0 0
0 0 0 0 0 4 0 0 0 0 0
Dieses Bild stellt ein T auf weißem Hintergrund da, dessen Bein nach unten hin immer heller wird.
Farbbild
P3
11 7
255
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 125 125 125 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 250 100 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 225 255 50 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 30 65 128 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 215 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 200 100 200 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 22 0 20 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
Dieses Bild stellt ein farbiges T dar.
Filter für das Portable Anymap Format mit python
from tkinter import *
from PIL import Image, ImageTk
# Ändere nichts oberhalb dieser Zeile
# Schreibe hier den Filter für P1 Dateien
def filter_p1(n):
pass
# Schreibe hier den Filter für P2 Dateien
def filter_p2(n):
pass
# Schreibe hier den Filter für P3 Dateien
def filter_p3(n):
pass
# Ändere nichts unterhalb dieser Zeile.
new_image = ""
filename= input("Bitte Dateinamen angeben: ")
file = filename
newfile = file.split(".")[0]+ "_filtered." + file.split(".")[1]
with open(file, "r") as f:
file = f.read()
success = False
if "P1" in file:
success = True
filetype = "P1"
elif "P2" in file:
success = True
filetype = "P2"
elif "P3" in file:
success = True
filetype = "P3"
if not success:
print("Could not determine filetype. Abort.")
quit()
file_content = file.split("\n")
image_data = []
value = 0
for l in file_content:
if not l.startswith("#"):
match value:
case 0:
new_image = new_image + l +"\n"
value += 1
case 1:
new_image = new_image + l +"\n"
resolution = l
value += 1
case 2:
if filetype != "P1":
new_image = new_image + l +"\n"
depth = l
else:
image_data += filter(lambda x: x != "", l.split(" "))
value += 1
case _:
image_data += filter(lambda x: x != "", l.split(" "))
#print(image_data)
columns = int(resolution.split(" ")[0])
if filetype == "P3":
columns = columns *3
count = 1
for i in image_data:
if filetype =="P1":
if i != "":
new_image = new_image + str(filter_p1(int(i))) + ""
elif filetype == "P2":
if i != "":
if "\n" in i:
print("I: "+i)
new_image = new_image + str(filter_p2(int(i))) + " "
elif filetype == "P3":
if i != "":
new_image = new_image + str(filter_p3(int(i))) + " "
if count%columns == 0:
new_image = new_image +"\n"
count += 1
f.close()
with open(newfile, "w") as nf:
nf.write(new_image)
nf.close()
root = Tk()
# Read the Image
original_image = Image.open(filename)
filtered_image = Image.open(newfile)
# Resize the image using resize() method
w = int(resolution.split(" ")[0])
h = int(resolution.split(" ")[1])
scale=10
if w < 300:
original_image = original_image.resize((w*scale, h*scale))
filtered_image = filtered_image.resize((w*scale, h*scale))
oimg = ImageTk.PhotoImage(original_image)
fimg = ImageTk.PhotoImage(filtered_image)
# create label and add resize image
label1 = Label(root, image=oimg)
label1.image = oimg
label1.pack()
label2 = Label(root, image=fimg)
label2.image = fimg
label2.pack()
# Execute Tkinter
root.mainloop()
print("Bye, bye")