それで、「パレット」画像タイプを使用してなんとかそれを実行しましたが、結果のファイルは期待したほど小さくありません...他の人に役立つ場合、または誰かがそれを改善できる場合に備えて、私のコードを次に示します。
from PIL import Image
im = Image.open("image1.png")
imP = im.convert('RGB').convert('P', palette=Image.ADAPTIVE, colors=3)
imP.putpalette([
0, 0, 0, # index 0 is black background
0, 0, 255, # index 1 is blue
255, 0, 0, # index 2 is red ])
im2 = Image.open("image2.png")
imP2L = im2.convert('L') # need a greyscale image to create a mask
mask = Image.eval(imP2L, lambda a: 255 if a == 0 else 0)
imP.paste(2, mask) # Paste the color of index 2 using image2 as a mask
imP.save('out3.png', transparency = 0, optimize = 1) # Save and set index 0 as transparent