竖屏图片转化成横屏图片

适用范围:

1440×2560图片横向复制、拼接后转化成1920×1080


开发过程

安装python图片处理库

cmd输入pip install pillow

创建文件夹

创建两个文件夹,名称分别为input output
input:把所有 1440×2560 的原图放进去
output:处理好的封面会自动生成在这里

创建.py

在上述文件夹同路径下新建一个txt,将下面的代码直接复制到txt中保存,把文件重命名为批量拼接.py

点击查看代码
from PIL import Image
import os

# -------------------------- 配置参数(无需修改) --------------------------
INPUT_FOLDER = "input"    # 原图存放文件夹
OUTPUT_FOLDER = "output"  # 处理后图片输出文件夹
TARGET_WIDTH = 1920       # 最终输出宽度
TARGET_HEIGHT = 1080      # 最终输出高度
SUPPORT_FORMATS = (".jpg", ".jpeg", ".png", ".bmp")
# ------------------------------------------------------------------------

# 自动创建输出文件夹
os.makedirs(OUTPUT_FOLDER, exist_ok=True)

# 统计总文件数
total_files = len([f for f in os.listdir(INPUT_FOLDER) if f.lower().endswith(SUPPORT_FORMATS)])
processed_count = 0
failed_count = 0

print(f"找到 {total_files} 张待处理图片,开始处理...\n")

# 遍历所有图片
for filename in os.listdir(INPUT_FOLDER):
    if filename.lower().endswith(SUPPORT_FORMATS):
        file_path = os.path.join(INPUT_FOLDER, filename)
        try:
            # 打开原图
            with Image.open(file_path) as img:
                img_width, img_height = img.size
                
                # 步骤1:创建3张图并排的画布
                combined_width = img_width * 3
                combined_img = Image.new("RGB", (combined_width, img_height))
                
                # 依次粘贴三张图
                combined_img.paste(img, (0, 0))
                combined_img.paste(img, (img_width, 0))
                combined_img.paste(img, (img_width * 2, 0))
                
                # 步骤2:缩放到1920×1080(使用最高质量算法)
                final_img = combined_img.resize(
                    (TARGET_WIDTH, TARGET_HEIGHT),
                    Image.Resampling.LANCZOS
                )
                
                # 保存图片
                output_path = os.path.join(OUTPUT_FOLDER, filename)
                final_img.save(output_path, quality=95, optimize=True)
                
                processed_count += 1
                print(f"✅ [{processed_count}/{total_files}] 已完成:{filename}")
                
        except Exception as e:
            failed_count += 1
            print(f"❌ 处理失败:{filename},错误原因:{str(e)}")

# 处理完成统计
print(f"\n🎉 全部处理完成!")
print(f"成功:{processed_count} 张 | 失败:{failed_count} 张")
print(f"处理后的图片已保存到:{os.path.abspath(OUTPUT_FOLDER)}")

使用方法

  1. 把所有 1440×2560 的原图放进 input
  2. 双击运行 批量拼接.py 即可,生成的所有封面都是1920×1080 标准尺寸

代码优化

优化内容:完全无拉伸的居中裁剪版 Python 脚本

只用替换以下代码即可,使用方法跟上面一致

点击查看代码
from PIL import Image
import os

# -------------------------- 配置参数(无需修改) --------------------------
INPUT_FOLDER = "input"    # 原图存放文件夹
OUTPUT_FOLDER = "output"  # 处理后图片输出文件夹
TARGET_WIDTH = 1920       # 最终输出宽度
TARGET_HEIGHT = 1080      # 最终输出高度
SUPPORT_FORMATS = (".jpg", ".jpeg", ".png", ".bmp")
# ------------------------------------------------------------------------

# 自动创建输出文件夹
os.makedirs(OUTPUT_FOLDER, exist_ok=True)

# 统计总文件数
total_files = len([f for f in os.listdir(INPUT_FOLDER) if f.lower().endswith(SUPPORT_FORMATS)])
processed_count = 0
failed_count = 0

print(f"找到 {total_files} 张待处理图片,开始处理(无拉伸居中裁剪模式)...\n")

# 遍历所有图片
for filename in os.listdir(INPUT_FOLDER):
    if filename.lower().endswith(SUPPORT_FORMATS):
        file_path = os.path.join(INPUT_FOLDER, filename)
        try:
            # 打开原图
            with Image.open(file_path) as img:
                img_width, img_height = img.size
                
                # 步骤1:创建3张图并排的画布(无缝拼接)
                combined_width = img_width * 3
                combined_img = Image.new("RGB", (combined_width, img_height))
                combined_img.paste(img, (0, 0))
                combined_img.paste(img, (img_width, 0))
                combined_img.paste(img, (img_width * 2, 0))
                
                # 步骤2:等比例缩放到宽度=1920(保证无拉伸)
                scale_ratio = TARGET_WIDTH / combined_width
                scaled_height = int(combined_img.height * scale_ratio)
                scaled_img = combined_img.resize(
                    (TARGET_WIDTH, scaled_height),
                    Image.Resampling.LANCZOS
                )
                
                # 步骤3:上下居中裁剪到高度=1080
                # 计算需要裁剪掉的上下边距
                crop_top = (scaled_height - TARGET_HEIGHT) // 2
                crop_bottom = crop_top + TARGET_HEIGHT
                # 执行裁剪(左, 上, 右, 下)
                final_img = scaled_img.crop((0, crop_top, TARGET_WIDTH, crop_bottom))
                
                # 保存图片(高质量)
                output_path = os.path.join(OUTPUT_FOLDER, filename)
                final_img.save(output_path, quality=95, optimize=True)
                
                processed_count += 1
                print(f"✅ [{processed_count}/{total_files}] 已完成:{filename}")
                
        except Exception as e:
            failed_count += 1
            print(f"❌ 处理失败:{filename},错误原因:{str(e)}")

# 处理完成统计
print(f"\n🎉 全部处理完成!")
print(f"成功:{processed_count} 张 | 失败:{failed_count} 张")
print(f"处理后的图片已保存到:{os.path.abspath(OUTPUT_FOLDER)}")

打包生成exe

安装打包工具库

cmd输入pip install pyinstaller

一键打包成exe

  1. 找到你之前保存的 批量拼接.py 脚本文件(就是那个无拉伸居中裁剪版)
  2. 在这个脚本所在的文件夹,按住 Shift 键 + 鼠标右键,选择「在此处打开 PowerShell 窗口」(或「在此处打开命令窗口」)
  3. 复制下面的命令,粘贴进去按回车:
    pyinstaller --onefile --name 批量生成竖屏转横屏图片 批量拼接.py

获取可执行文件

打包完成后,你会在当前文件夹看到一个 dist 文件夹,打开它,里面的 批量生成竖屏转横屏图片.exe 就是你要的独立程序。

使用方法(和之前一样)

  1. 把这个 批量生成竖屏转横屏图片.exe 文件,和你的 inputoutput 文件夹放在同一个目录下
  2. 把所有 1440×2560 的原图放进 input 文件夹
  3. 双击运行 批量生成竖屏转横屏图片.exe
  4. 等待黑窗口跑完,处理好的 1920×1080 封面就全部在 output 文件夹里了
posted @ 2026-05-23 03:44  Li_Neo  阅读(12)  评论(0)    收藏  举报