17.2.3 复制和粘贴图像到其他图像
作者:互联网
copy()方法返回一个新的 Image 对象,它和原来的 Image 对象具有一样的图像。
如果需要修改图像,同时也希望保持原有的版本不变,这非常有用。例如,在交互式环境中输入以下代码:
>>> catIm = Image.open('zophie.png')
>>> catCopyIm = catIm.copy()
catIm 和 catCopyIm 变量包含了两个独立的 Image 对象,它们的图像相同。既然 catCopyIm 中保存了一个 Image 对象,你可以随意修改
catCopyIm,将它存入一个新的文件名,而 zophie.png 没有改变。例如,让我们尝试用 paste()方法修改 catCopyIm。
paste()方法在 Image 对象调用,将另一个图像粘贴在它上面。我们继续交互式环境的例子,将一个较小的图像粘贴到 catCopyIm。
>>> faceIm = catIm.crop((335, 345, 565, 560))
>>> faceIm.size
(230, 215)
>>> catCopyIm.paste(faceIm, (0, 0))
>>> catCopyIm.paste(faceIm, (400, 500))
>>> catCopyIm.save('pasted.png')
首先我们向 crop()传入一个矩形元组,指定 zophie.png 中的一个矩形区域,包含Zophie 的脸。这将创建一个 Image 对象,表示 230×215 的剪裁区域,保存在
faceIm中。现在,我们可以将 faceIm 粘贴到 catCopyIm。paste()方法有两个参数:一个“源”
Image 对象,一个包含 x 和 y 坐标的元组,指明源 Image 对象粘贴到主 Image 对象时左上角的位置。这里,我们在catCopyIm 上两次调用 paste(),第一次传入(0,
0),第二次传入(400, 500)。这将 faceIm 两次粘贴到 catCopyIm:一次 faceIm 的左上角在 (0, 0),一次 faceIm 的左上角在(400,
500)。最后,我们将修改后的 catCopyIm 存入 pasted.png。pasted.png 如图 17-5 所示。
图 17-5 Zophie 猫,包含两次粘贴她的脸
注意 尽管名称是 copy()和 paste(),但 Pillow 中的方法不使用计算机的剪贴板。
请注意,paste()方法在原图上修改它的 Image 对象,它不会返回粘贴后图像的 Image 对象。如果想调用 paste(),但还要保持原始图像的未修改版本,就需要先复制图像,然后在副本上调用
paste()。
假定要用 Zophie 的头平铺整个图像,如图 17-6 所示。可以用两个 for 循环来实现这个效果。继续交互式环境的例子,输入以下代码:
>>> catImWidth, catImHeight = catIm.size
>>> faceImWidth, faceImHeight = faceIm.size
➊ >>> catCopyTwo = catIm.copy()
➋ >>> for left in range(0, catImWidth, faceImWidth):
➌ for top in range(0, catImHeight, faceImHeight): print(left,
top)
catCopyTwo.paste(faceIm, (left, top))
0 0
0 215
0 430
0 645
0 860
0 1075
230 0 230 215
--snip-- 690 860
690 1075
>>> catCopyTwo.save('tiled.png')
这里,我们将 catIm 的高度的宽度保存在 catImWidth 和catImHeight 中。在➊,我们得到了 catIm 的副本,并保存在
catCopyTwo。既然有了一个副本可以粘贴,我们就开始循环,将 faceIm 粘贴到 catCopyTwo。外层 for 循环的 left 变量从 0
开始,增量是faceImWidth(即230)➋。内层for 循环的top 变量从0 开始,增量是faceImHeight(即 215)➌。这些嵌套的
for 循环生成了 left 和 top 的值,将 faceIm 图像按照网格粘贴到 Image 对象 catCopyTwo,如图 17-6 所示。为了看到嵌套循环的工作,我们打印了 left 和
top。粘贴完成后,我们将修改后的 catCopyTwo 保存到 tiled.png。
标签:catCopyIm,Image,catIm,17.2,faceIm,图像,paste,粘贴 来源: https://blog.csdn.net/china365love/article/details/122300580