调用库
调用numpy库与PIL库
程序设计思路
1:利用Image.open(),numpy.array()与a.tolist(),将原图片转化为二维列表
img=Image.open('C:\\Users\\sunsz\\Desktop\\lena.tif','r')
img_array =numpy.array(img).tolist()
magnify(img_array)
2:创建放大函数
def magnify(img)
3:获取放大倍数与原图尺寸,并生成一个空列表存放放大后的数据
c1=1.75
c2=1.65
high=len(img)
weight=len(img[0])
newimg=[[[]for k in range(int(weight*c1))]for l in range(int(high*c2))]
4:遍历原图列表,将位置系数放大后放到空序列相应的位置
for y in range(weight):
for x in range(high):
#print(x,y,int(x*c2),int(y*c1))
m=int(x*c2)
n=int(y*c1)
newimg[m][n]=img[x][y]
5:遍历新列表,对空的位置填充最近的颜色
for x in range(int(weight*c2)):
for y in range(int(high*c1)):
if not newimg[x][y]:
copy_x=x
copy_y=y
i=0
a=1
while a:
i=i+1
copy_x=copy_x-i
if 0<copy_x<int(256*c2):
if newimg[copy_x][copy_y]:
newimg[x][y]=newimg[copy_x][copy_y]
break
copy_x=copy_x+i
copy_x=copy_x+i
if 0<copy_x<int(256*c2):
if newimg[copy_x][copy_y]:
newimg[x][y]=newimg[copy_x][copy_y]
break
copy_x=copy_x-i
copy_y=copy_y-i
if 0<copy_y<int(256*c1):
if newimg[copy_x][copy_y]:
newimg[x][y]=newimg[copy_x][copy_y]
break
copy_y=copy_y+i
copy_y=copy_y+i
if 0<copy_y<int(256*c1):
if newimg[copy_x][copy_y]:
newimg[x][y]=newimg[copy_x][copy_y]
break
copy_y=copy_y-i
6:将经4,5步生成的新二维列表转化为图片
new_img=numpy.array(newimg)
im = Image.fromarray(numpy.uint8(new_img))
im.save("C:\\Users\\sunsz\\Desktop\\magnify.tif"
)
遇到的问题
生成的图片在左上方插入了一段原图