当前位置: 首页 > news >正文

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

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

在这里插入图片描述

#!/usr/bin/env python3
"""
图片尺寸转换脚本
将带透明背景的图片转换为多种尺寸的1:1图片
"""import os
import sys
from PIL import Image, ImageOps
import argparsedef 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.sizeprint(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) // 2y_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 Falsereturn Truedef 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:passexcept 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()

用法:

python resize_images.py your_image.png

输出内容:

output/
├── 48/
│   └── logo.png  (48x48)
├── 72/
│   └── logo.png  (72x72)
├── 96/
│   └── logo.png  (96x96)
├── 144/
│   └── logo.png  (144x144)
└── 192/└── logo.png  (192x192)
http://www.lryc.cn/news/618856.html

相关文章:

  • 什么是 Spring MVC?
  • AuthController类讲解
  • 龙舌兰人造植物、Apple Watch保护壳、厨房水槽收纳架、家居磁性挂钩等亚马逊热销单品,正在外观专利TRO维权!
  • 备战国赛算法讲解——马尔科夫链,2025国赛数学建模B题详细思路模型更新
  • VUE+SPRINGBOOT从0-1打造前后端-前后台系统-会议记录
  • Linux网络--2.2、TCP接口
  • 5 重复匹配
  • 51 单片机分层架构的模块依赖关系图
  • 详细解释RBFT和NoxBFT及RAFT的差异
  • PCIe Electrical Idle Sequences ( EIOS and EIEOS )
  • Java 22 新特性:字符串模板(String Templates)让拼接更优雅、更安全
  • 机械学习--TF-IDF实战--红楼梦数据处理
  • 什么是iOS超级签名?为何它能解决企业签名的“掉签”难题?
  • 如何在idea中导入外来文件
  • provide()函数和inject()函数
  • 力扣-394.字符串解码
  • Spark Core 3.3.2 略讲~
  • Java设计模式-快速入门
  • DEA模型MATLAB实现(CCR、BCC、超效率)
  • 优选算法 力扣 18. 四数之和 双指针算法的进化 优化时间复杂度 C++ 题解 每日一题
  • 基于.net高校财务管理系统/c#/asp.net/sql server 设计开发
  • GIT使用攻略
  • IEEE 2025 | 重磅开源!SLAM框架用“法向量+LRU缓存”,将三维重建效率飙升72%!
  • 【Linux】init和bash的区别
  • 【数据结构】——顺序表链表(超详细解析!!!)
  • iOS 编译 cpp 代码生成 .a 库备忘
  • 探秘酵母单杂交技术:解锁基因调控的密码
  • 元宇宙虚拟金融服务全景解析:技术创新、场景重构与未来趋势
  • JPrint免费的Web静默打印控件:代理如何使用?
  • 学习游制作记录(背包UI以及各种物品的存储)8.12