错误代码:
# pip install Pillow
import PIL.Image as Image
# 以第一个像素为准,相同色改为透明
def transparent_back(img):
img = img.convert('RGBA')
L, H = img.size
print(L, H)
# color_0 = (255, 255, 255, 255) # 要替换的颜色
for h in range(H):
print()
for l in range(L):
dot = (l, h)
color_1 = img.getpixel(dot)
print("%15s"%(color_1), end=' ')
if color_1[0] > 210 and color_1[1] > 210 and color_1[2] > 210:
list = (color_1[0], color_1[1], color_1[2], 0)
img.putpixel(dot, list)
# else:
# list = (255, 255, 255, 255)
# img.putpixel(dot, list)
# print(type(color_1))
# if color_1 == color_0:
# color_1 = color_1[:-1] + (0,)
# img.putpixel(dot, color_1)
return img
if __name__ == '__main__':
img = Image.open('AD.jpg')
img = transparent_back(img)
img.save('img2.png')
错误原因
原因:1 % 操作符只能直接用于字符串(‘123’),列表([1,2,3])、元组,因此需要一一匹配操作符。
解决方法
上代码
for h in range(H):
print()
for l in range(L):
dot = (l, h)
color_1 = img.getpixel(dot)
print("%3s,%3s,%3s,%3s"%(color_1), end=' ')
if color_1[0] > 210 and color_1[1] > 210 and color_1[2] > 210:
list = (color_1[0], color_1[1], color_1[2], 0)
img.putpixel(dot, list)
#简单解释
说明前后%和后面的参数数量不对应,这上面的color_1是一个有四个元素的元组
255,255,255,255
错误原因是后面有四个参数,但是前面只有一个%15s 在数量上不能正确匹配所以出错
正确改成
print("%3s,%3s,%3s,%3s"%(color_1), end=' ')
则就可以正常运行了
如果因为我的代码太复杂了难以理解,可以参考下面的这个博客
Python学习笔记:TypeError: not all arguments converted during string formatting_去向前方的博客-CSDN博客



