使用Python将两张照片透明重叠

使用Python将两张照片透明重叠

Posted September 30, 2015

透明重叠最主要用的是Image.blend方法(详情请看第二个代码块), 第一个代码块主要是将多个图片剪切到一张大图, 然后用这张大图和另外一张非剪切的大图进行透明重叠, 主要Image.blend方法第三个参数是相对于第一张图片透明度。

Python

# -*- coding: utf-8 -*-
'''
File Name: merge.py
Author: JackeyGao
mail: [email protected]
Created Time: 一  6/ 1 13:27:49 2015
'''

from __future__ import division
import os
import math
import Image

def image_resize(img, size=(4, 3)):
    """调整图片大小
    """
    try:
        if img.mode not in ('L', 'RGB'):
            img = img.convert('RGB')
        img = img.resize(size)
    except Exception, e:
        pass
    return img

def image_merge(images, output_dir='output', output_name='merge.jpg', \
                restriction_max_width=None, restriction_max_height=None):
    """垂直合并多张图片
    images - 要合并的图片路径列表
    ouput_dir - 输出路径
    output_name - 输出文件名
    restriction_max_width - 限制合并后的图片最大宽度,如果超过将等比缩小
    restriction_max_height - 限制合并后的图片最大高度,如果超过将等比缩小
    """
    x_number = 10 if len(images) >= 5 else len(images)
    y_number = int(math.ceil(len(images) / x_number))
    total_height = 0
    # 计算合成后图片的宽度(以最宽的为准)和高度
    for img_path in images:
        if os.path.exists(img_path):
            img = Image.open(img_path)
            img = img.resize((712, 960))
            width, height = img.size

            max_width = width * x_number
            total_height = height * y_number

    # 产生一张空白图
    new_img = Image.new('RGB', (max_width, total_height), 255)
    # 合并
    x = y = n = 0
    for img_path in images:
        if os.path.exists(img_path):
            img = Image.open(img_path)
            img = img.resize((712, 960))
            width, height = img.size
            print width, height
            new_img.paste(img, (x, y))

            n += 1
            if n % x_number == 0:
                y += height
                x = 0
            else:
                x += width



    if restriction_max_width and max_width >= restriction_max_width:
        # 如果宽带超过限制
        # 等比例缩小
        ratio = restriction_max_height / float(max_width)
        max_width = restriction_max_width
        total_height = int(total_height * ratio)
        new_img = image_resize(new_img, size=(max_width, total_height))

    if restriction_max_height and total_height >= restriction_max_height:
        # 如果高度超过限制
        # 等比例缩小
        ratio = restriction_max_height / float(total_height)
        max_width = int(max_width * ratio)
        total_height = restriction_max_height
        new_img = image_resize(new_img, size=(max_width, total_height))

    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    save_path = '%s/%s' % (output_dir, output_name)
    new_img.save(save_path)
    return save_path

if __name__ == '__main__':
    import os
    image_files = [ "input/%s" % f for f in os.listdir("input/") if f.endswith("pg") ]

    image_files = image_files * 4

    image_merge(images=image_files)

将两张背景图重叠

Python

import Image
img = Image.open("bg.jpeg")
img2 = Image.open("merge.jpg")
merge = Image.blend(img, img2, 0.3)
merge.save("my.jpg")

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据小魔方

sparklines迷你图系列5——Evolution(Horizon)

今天跟大家分享区域(面积图)图的一个变体——水平线图。 之所以说是面积图的变体,因为这种水平线图,表达的信息与面积图几乎差不多,差别仅仅在图表呈现形式上。 ? ...

3186
来自专栏数据小魔方

蛇形图

今天要跟大家分享的图表是蛇形图! 该图表的制作原理很类似之前讲过的垂直折线图,不过这里要复杂一些,会用到很多错位排列的技巧。 下面就开始吧,还是首选让大家看一下...

3875
来自专栏深度学习之tensorflow实战篇

R语言高级绘图命令(标题-颜色等)

plot(x)          以x的元素值为纵坐标、以序号为横坐标绘图 plot(x,y)        x(在x-轴上)与y(在y-轴上)的二元作图 ...

5836
来自专栏jojo的技术小屋

原 CSS3 filter

作者:汪娇娇 日期:2016.10.9 其实之前几乎都没用过filter属性,就算知道也只是在脑中留了点浅浅的印象,直到最近因为项目的原因,才对filter进行...

2033
来自专栏州的先生

Matplotlib实践系列:折线图完全示例

1715
来自专栏CDA数据分析师

【图表大师三】仿gartner清爽圆角矩阵图

在Gartner的报告中,常看到如下图的清爽圆角矩阵图。 ? 我很喜欢这种清爽的图表风格,其特点有:干净清爽的颜色,优雅的圆角绘图区,个性的XY坐标轴。...

2036
来自专栏深度学习之tensorflow实战篇

Python生成词云图,TIIDF方法文本挖掘: 词频统计,词云图

python中使用wordcloud包生成的词云图。 下面来介绍一下wordcloud包的基本用法。 class wordcloud.WordCloud(fon...

5026
来自专栏生信技能树

用python编写验证码

作为一个用python的生信工程师,平时工作中除了用python来处理些文本文件和搭建流程,没事也想探索些其他有趣的功能。这几天就在网上学习了下如何用pytho...

4015
来自专栏前端说吧

CSS3的transition动画功能

3186
来自专栏用户2442861的专栏

Python PIL ImageDraw 和ImageFont模块学习

http://blog.csdn.net/dou_co/article/details/17618319

8362

扫码关注云+社区

领取腾讯云代金券