小游戏开发-巧用python代码实现图片的合成


需求:
1. 给定底部图片和麻将文字图片,将麻将文字图片合成到底部图片上
2. 麻将文字图片有 34 张,每张图片的大小不一样,需要根据底部图片的大小,将麻将文字图片缩放到合适的大小
3. 麻将文字图片需要居中显示在底部图片上
4. 合成后的图片需要保存到指定的目录下
实现:
1. 打开底部图片和麻将文字图片
2. 计算麻将文字图片的新高度,以保持比例
3. 将麻将文字图片缩放到新的大小
4. 创建一个新的图像,与底部图像相同大小
5. 将底部图片放入合成图像
6. 计算贴图位置(居中)
7. 将文字图像粘贴到合成图像上
8. 保存合成后的图片
注意:
1. 麻将文字图片的大小不一样,需要根据底部图片的大小,将麻将文字图片缩放到合适的大小
2. 麻将文字图片需要居中显示在底部图片上
3. 合成后的图片需要保存到指定的目录下


以下为实例代码和素材:


麻将背景两套


麻将文字一套


合成效果如下


源代码:

from PIL import Image
import os

# cocos游戏开发图片合成实例


# 合成代码
def combine_image_with_background(text_image_path, background_image_path, output_image_path):
    # 打开底部图片
    background = Image.open(background_image_path).convert("RGBA")

    # 打开麻将文字图片
    max_width = 80  # 根据需要自定义的最大宽度
    text_image = Image.open(text_image_path).convert("RGBA")

    # 计算新高度以保持比例
    ratio = max_width / text_image.width
    new_height = int(text_image.height * ratio)

    text_image = text_image.resize((max_width, new_height), Image.LANCZOS)

    # 创建一个新的图像,与底部图像相同大小
    combined_image = Image.new("RGBA", background.size)

    # 将底部图片放入合成图像
    combined_image.paste(background, (0, 0), background)

    # 计算贴图位置(居中)
    text_x = (combined_image.width - text_image.width) // 2
    padding = 10  # 根据需要自定义上移的像素
    text_y = (combined_image.height - text_image.height) // 2 - padding

    # 将文字图像粘贴到合成图像上
    combined_image.paste(text_image, (text_x, text_y), text_image)

    # 保存合成后的图片
    combined_image.save(output_image_path, format="PNG")
    print(f"Combined image saved at {output_image_path}")



# 定义底部图片路径
background_image_path = "G:\BaiduNetdiskDownload\麻将素材\麻将素材\Mj_up_0.png"

# 假设您有 34 张麻将文字图片的路径
# text_images = [f"G:\BaiduNetdiskDownload\麻将素材\麻将素材\Dot_{i}.png" for i in range(1, 10)]

text_images = [f"G:\BaiduNetdiskDownload\麻将素材\麻将素材\Bamboo_{i}.png" for i in range(1, 10)]

# 示例用法
if __name__ == "__main__":


    # 输出合成后的图片路径
    output_directory = "G:\\BaiduNetdiskDownload\\麻将素材\\麻将素材\\new2"
    os.makedirs(output_directory, exist_ok=True)  # 创建输出目录,如果不存在

    for i, text_image_path in enumerate(text_images, start=1):
        output_image_path = os.path.join(output_directory, f"combined_image_{i}.png")
        combine_image_with_background(text_image_path, background_image_path, output_image_path)

相关文章

Python自动生成手绘、证件照、九宫格...太炫酷了

Python像是叮当猫的口袋,几乎什么都能做,适合外行小白们去摸索学习,能极大的增加对编程的兴趣。有些工具用python来实现不一定是技术上的最优选择,但可能是最简洁、最面向大众的。介绍几个不错的处理...

教你使用python编程绘制函数图像

函数公式很抽象,图像更直观,但聪明的我们总不会手画图像吧?来学习一下用Python怎么画函数图像吧。首先打开Visual Studio Code(后面简称VSCode),点击New File(中文版是...

新手必看!如何用Python绘制复杂函数图像

在数据可视化的奇妙世界里,Python 就像是一把万能钥匙,能够帮我们打开一扇扇通往复杂函数图像绘制的大门。今天,就跟着我一起来探索如何用 Python 绘制那些令人惊叹的复杂函数图像吧!对于数学爱好...

怎么做到的?用python制作九宫格图片,太棒了

1. ? 应用场景 ?当初的想法是:想把一张图切割成九等份,发布到微信朋友圈,切割出来的图片,上传到朋友圈,发现微信不按照我排列的序号来排版。这样的结果是很耗时间的。让我深思,能不能有一种,直接拼接成...

python调用 stable diffusion批量生成图片代码解析

文中大多数内容来源github,版权属于原作者,1. 基础环境在windows上做示例,本地要安装了pythonpython的pip模块 安装 webuiapi编辑器 pyCharm 2024.2(c...

python图像处理入门-提取轮廓

提取图像中物体的轮廓,通常用在图像识别中,比如图像像素级分割,应用面比较广。import cv2 import numpy as np from skimage.measure import fi...