一键生成 Android 适配不同分辨率尺寸的图片

很实用的脚本,记录下备用。

java 复制代码
#!/usr/bin/env python3
"""
图片尺寸转换脚本
将带透明背景的图片转换为多种尺寸的1:1图片
"""

import os
import sys
from PIL import Image, ImageOps
import argparse


def resize_image(input_path, output_dir, sizes=[48, 72, 96, 144, 192]):
    """
    将输入图片转换为多种尺寸的1:1图片
    
    Args:
        input_path (str): 输入图片路径
        output_dir (str): 输出目录
        sizes (list): 目标尺寸列表
    """
    try:
        # 打开图片
        with Image.open(input_path) as img:
            # 获取原始图片信息
            original_width, original_height = img.size
            print(f"原始图片尺寸: {original_width} x {original_height}")
            
            # 确保输出目录存在
            os.makedirs(output_dir, exist_ok=True)
            
            # 获取原始文件名(包含扩展名)
            original_filename = os.path.basename(input_path)
            
            # 为每个目标尺寸生成图片
            for size in sizes:
                # 创建以尺寸命名的文件夹
                size_folder = os.path.join(output_dir, str(size))
                os.makedirs(size_folder, exist_ok=True)
                
                # 创建1:1的正方形画布,背景透明
                square_img = Image.new('RGBA', (size, size), (0, 0, 0, 0))
                
                # 计算缩放比例,保持宽高比
                scale = min(size / original_width, size / original_height)
                new_width = int(original_width * scale)
                new_height = int(original_height * scale)
                
                # 缩放图片
                resized_img = img.resize((new_width, new_height), Image.Resampling.LANCZOS)
                
                # 计算居中位置
                x_offset = (size - new_width) // 2
                y_offset = (size - new_height) // 2
                
                # 将缩放后的图片粘贴到正方形画布中心
                square_img.paste(resized_img, (x_offset, y_offset), resized_img)
                
                # 保存图片到对应尺寸的文件夹,文件名与输入文件相同
                output_path = os.path.join(size_folder, original_filename)
                square_img.save(output_path, 'PNG')
                print(f"已生成: {output_path} ({size}x{size})")
                
    except Exception as e:
        print(f"处理图片时出错: {e}")
        return False
    
    return True


def main():
    parser = argparse.ArgumentParser(description='将图片转换为多种尺寸的1:1图片')
    parser.add_argument('input', help='输入图片路径')
    parser.add_argument('-o', '--output', default='output', help='输出目录 (默认: output)')
    parser.add_argument('-s', '--sizes', nargs='+', type=int, 
                       default=[48, 72, 96, 144, 192], 
                       help='目标尺寸列表 (默认: 48 72 96 144 192)')
    
    args = parser.parse_args()
    
    # 检查输入文件是否存在
    if not os.path.exists(args.input):
        print(f"错误: 输入文件 '{args.input}' 不存在")
        sys.exit(1)
    
    # 检查输入文件是否为图片
    try:
        with Image.open(args.input) as img:
            pass
    except Exception as e:
        print(f"错误: 无法打开图片文件 '{args.input}': {e}")
        sys.exit(1)
    
    print(f"开始处理图片: {args.input}")
    print(f"目标尺寸: {args.sizes}")
    print(f"输出目录: {args.output}")
    print("-" * 50)
    
    # 处理图片
    success = resize_image(args.input, args.output, args.sizes)
    
    if success:
        print("-" * 50)
        print("所有图片处理完成!")
    else:
        print("处理失败!")
        sys.exit(1)


if __name__ == "__main__":
    main()

用法:

java 复制代码
python resize_images.py your_image.png

输出内容:

java 复制代码
output/
├── 48/
│   └── logo.png  (48x48)
├── 72/
│   └── logo.png  (72x72)
├── 96/
│   └── logo.png  (96x96)
├── 144/
│   └── logo.png  (144x144)
└── 192/
    └── logo.png  (192x192)
相关推荐
“AI国潮设计-小江”1 小时前
《Python+SDXL实战:用ControlNet精准控制“英歌舞翻糖吐司”构图,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
程序喵大人1 小时前
【C++入门】编译链接模型 - 01 一个 C++ 程序是怎样变成可执行文件的
开发语言·c++·编译链接模型
可乐鸡翅yeah_3 小时前
FFmpeg 生成 HLS 独立分片 independent‑segments 参数到底有什么用
javascript·ffmpeg·音视频·safari·m3u8
sunshine22 girl3 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
福兮说3 小时前
canvas 旋转图片的六个坑:四角被裁、Math.ceil 多出 1px 黑边、JPG 角发黑、翻转方向反了
前端·javascript·图像处理·canvas
菜鸟~noob2333 小时前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
Ai-_Man4 小时前
您您这可以把Grok的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑
惊讶的猫4 小时前
工具选对之后还不够:商城 Agent 的参数与权限治理
开发语言·python
cmpxr_4 小时前
【MicroPython】如何刷新ESP8266的固件
开发语言·micropython
三少爷的鞋4 小时前
AI 时代,我们都将成为通才型开发者:只懂 Android,已经不够了
android