当前位置: 首页 > 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.xdnf.cn/news/1285309.html

相关文章:

  • Wireshark专家模式定位网络故障:14种TCP异常深度解剖
  • Ceph存储池参数中pg_num和pgp_num的关系
  • 终端安全检测和防御技术
  • 华为发布AI推理新技术,降低对HBM内存依赖
  • 负载均衡详解
  • 纯CSS+JS制作抽奖大转盘
  • C#教程之NPOI读写excel文件XLS,XLSX格式
  • 【vue(二)Vuex】
  • damn the jvm again(2)
  • 《Qwen2.5-VL 》论文精读笔记
  • 【测试】Bug+设计测试用例
  • 【Bug经验分享】由jsonObject-TypeReference引发的序列化问题
  • 无人机在环保监测中的应用:低空经济发展的智能监测与高效治理
  • 从0开始的中后台管理系统-5(菜单的路径绑定以及角色页面的实现)
  • Javase 之 字符串String类
  • 《飞算Java AI:从安装到需求转实战项目详细教学》
  • 机器学习算法篇(十):TF-IDF算法详解与应用实战
  • 线性代数 · 矩阵 | 最小多项式
  • IoTDB与传统数据库的核心区别
  • Spring Boot项目使用WebClient调用第三方接口详细教程
  • Elasticsearch Node.js 客户端连接指南(Connecting)
  • 一起来聊聊GPT-5
  • 面试经典150题[001]:合并两个有序数组(LeetCode 88)
  • 从零开始手搓一个GPT大语言模型:从理论到实践的完整指南(一)
  • 安全合规5--终端安全检测和防御技术
  • MySQL基础面试
  • MySQL 索引优化实战:从执行计划分析到优化策略落地
  • 【狂热算法篇】探寻图论幽径之SPFA算法:图论迷宫里的闪电寻径者(通俗易懂版)
  • 【Unity笔记】视频播放控制器全攻略:支持延迟播放、事件回调与多视频管理的完整实现
  • 数据结构:图