python PIL实现图片合成

在项目中需要将两张图片合在一起。遇到两种情况,一种就是两张非透明图片的合成, 一种是涉及到透明png的合成。

相关API见 http://pillow.readthedocs.io/en/latest/reference/Image.html

第一种情况,直接将两张图片合在一起就可以了。如下图所示,将两张图片合在一起

  +        =     

详细代码

    from PIL import Image
    #加载底图
    base_img = Image.open(ur‘D:\Desktop\1.png‘)
    # 可以查看图片的size和mode,常见mode有RGB和RGBA,RGBA比RGB多了Alpha透明度
    # print base_img.size, base_img.mode
    box = (166, 64, 320, 337)  # 底图上需要P掉的区域

    #加载需要P上去的图片
    tmp_img = Image.open(ur‘D:\Desktop\2.png‘)
    #这里可以选择一块区域或者整张图片
    #region = tmp_img.crop((0,0,304,546)) #选择一块区域
    #或者使用整张图片
    region = tmp_img

    #使用 paste(region, box) 方法将图片粘贴到另一种图片上去.
    # 注意,region的大小必须和box的大小完全匹配。但是两张图片的mode可以不同,合并的时候回自动转化。如果需要保留透明度,则使用RGMA mode
    #提前将图片进行缩放,以适应box区域大小
    # region = region.rotate(180) #对图片进行旋转
    region = region.resize((box[2] - box[0], box[3] - box[1]))
    base_img.paste(region, box)
    #base_img.show() # 查看合成的图片
    base_img.save(‘./out.png‘) #保存图片

第一种情况时候规则的图片进行合并,比如矩形,难以对于任意形状的图片。对于任意形状的合并可以考虑使用透明的PNG来完成。

第二种情况,将非透明的图片放在底部,上面放一张局部透明的png图片,然后合成一张图片。

           

      

代码

    from PIL import Image
    #加载中间透明的手机图片
    base_img = Image.open(ur‘D:\Desktop\3.png‘)
    #新建透明底图,大小和手机图一样,mode使用RGBA,保留Alpha透明度,颜色为透明
    #Image.new(mode, size, color=0),color可以用tuple表示,分别表示RGBA的值
    target = Image.new(‘RGBA‘, base_img.size, (0, 0, 0, 0))
    box = (166, 64, 320, 337) #区域
    # 加载需要狐狸像
    region = Image.open(ur‘D:\Desktop\4.png‘)
    region = region.rotate(180) #旋转180度
    #确保图片是RGBA格式,大小和box区域一样
    region = region.convert("RGBA")
    region = region.resize((box[2] - box[0], box[3] - box[1]))
    #先将狐狸像合成到底图上
    target.paste(region,box)
    #将手机图覆盖上去,中间透明区域将狐狸像显示出来。
    target.paste(base_img,(0,0),base_img) #第一个参数表示需要粘贴的图像,中间的是坐标,最后是一个是mask图片,用于指定透明区域,将底图显示出来。
    # target.show()
    target.save(‘./out.png‘)  # 保存图片
时间: 2024-11-08 12:13:07

python PIL实现图片合成的相关文章

python PIL 操作图片

第 0000 题:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果 https://github.com/Yixiaohan/show-me-the-code 首先要安装PIL 库,参考http://liam0205.me/2015/04/22/pil-tutorial-basic-usage/ sudo pip install Pillow 然后python 如下 from PIL import Image, ImageDraw im

python PIL Image图片裁剪

#coding=utf-8 from PIL import Image # 参数filePath = '~/a_1.jpeg'mode = 'r' # 这里的 mode 必须为r,否则报错 # 读取图片# Image.open() 为懒执行, 只验证是否是图片, 获取数据时才会读取数据im = Image.open(filePath, mode) box = (0,0,1100,1000) # box为4元祖, 分别为裁剪图片左上角,右下角的像素坐标print im# 图片裁切成矩形,返回Ima

python PIL比较图片像素

1 # -*- coding: utf-8 -*- 2 3 from PIL import Image 4 from pylab import * 5 6 def compare_pic_L(pic1,pic2): 7 #打开第一张图片 8 im1 = Image.open(pic1).convert('L') 9 print im1.format ,im1.size, im1.mode 10 11 #像素值转数组 12 aim1 = np.transpose(array(im1)) 13 #i

关于使用TexturePackerGUI将图片合成和用Python Imaging Library将图片分解

写这片博客前,我在学习cocos2d-x,正在做一个微信打飞机的项目,为了将飞机图片资源合成为一张,使用到了TexturePackerGUI软件,在这介绍使用方法,后面是将这张合成图片分解成原来图片的方法. 合成 软件下载地址 破解完成之后就开始使用,对里面控件不熟悉的请参考这篇文章,虽然看起来复杂,但是只要把你所有需要合成的资源全部移到右边的框内就行了,如下图(蓝色的地方): 好了,把图片全部拖进去之后,就可以开始导出了,选择菜单栏中的Publish,在此之前,请在左边的DataFile中设置

RGB值转化图片(python PIL)

今天看到一道misc的题目,得到一RGB值的txt文件,需解决RGB值转图片.具体题目:here 由于第一次碰到这个类型的题目,做一下记录,在这里我采用的是python 的PIL图像库 具体思路: 1.首先我们要先确定图片的size,既宽度高度 通过txt文件行数(61366=2*61*503,因为最后一行是空行,所以不在计算范围内)的整数分解 可以得到以下几个不同的size:503*122,1006*61,30683*2(x,y交换一下对图片不会有很大的变化,只是横着和竖着的区别) 所以我们接

图片切碎片脚本 python PIL库实践

python PIL库实践运用,对图像进行切碎片操作. 原图如图一 图一 我们想要的是图片的不同部分,比如图二中1.2.3.4每一个分区单独的碎片, 图二 做法是做出4张跟原图大小一样的碎片模版图,白底,想要的区域涂黑(非纯白)即可.1区域的碎片模板图如图三所示: 图三 脚本处理图片的方法:先找出碎片模版中的非白区域(可以不规则),然后将原图中这个区域内的所有像素点的颜色都放到新的一张跟原图像素大小一样的新图上,新图的其余位置都设置成透明(可以根据自己的不同需求进行不同的调整). 1碎片模版得到

Python PIL创建文字图片

PIL库中包含了很多模块,恰当地利用这些模块可以做许多图像处理方面的工作. 下面是我用来生成字母或字符串测试图片而写的类及测试代码. 主要用到的模块: PIL.Image,PIL.ImageDraw,PIL.ImageFont PIL.Image用来生成一个空的图片,ImageDraw用来在空图片上画图及写字符,ImageFont则是创建需要使用到的字体 #-*- coding:gb2312 -*- from PIL import Image,ImageDraw,ImageFont,ImageO

python PIL库回顾

之前用PIL的时候都不知道看官方文档,网上搜索结果靠前的一些介绍性的博客其实很扯淡,讲两个函数.贴三张图,文章就完了. 今天把他的文档看了看,发现一点也不简单,网上介绍的不过是冰山一角. 对于我这样一个不太懂多媒体的人,如果用到图像处理,主要也就这些操作: 读写.取通道.两幅图合并.像素点操作.各种滤镜.色彩模式转换.图像旋转.缩放.裁剪.仿射. PIL对付这些小喽啰,都是完全没有问题的. 读写 open是Image类的一个方法,返回值是一个Image对象,值得注意的是,open不能打开网络图片

python PIL库回顾1

1 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HE