ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

17.2.3 复制和粘贴图像到其他图像

2022-01-04 12:59:13  阅读:138  来源: 互联网

标签:catCopyIm Image catIm 17.2 faceIm 图像 paste 粘贴


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有