其他分享
首页 > 其他分享> > 17.2.3 复制和粘贴图像到其他图像

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