Python脚本批量转换图片格式至ico

    有时我们需要给一些其他格式的图标转换成ico格式才能使用,比如pyinstaller打包python脚本的时候。一两个图标使用在线转换的方式还是可以接受的。但是需要转换的图标特别多的时候,在线转换就比较吃力了。

    环境:windows      平台:python3      用到的模块:os,sys,PythonMagick

    PythonMagick安装方式:https://blog.csdn.net/xgbm_k/article/details/73351272

    主要代码:

import PythonMagick

img = PythonMagick.Image(r"F:\bird.png")
img.sample('256x256')
img.write(r'F:\bird.ico')

    通过PythonMagick模块打开待转的图片,然后调整为需要的大小,最后直接保存为需要转码的格式即可。

以下为我自己写的一个批量处理一个文件夹内所有图片的代码:

# -*- coding: utf-8 -*-
import PythonMagick
import os
import sys

g_default_size = '256x256'
g_output = ''
g_valid_file_type = ['jpg', 'jpeg', 'png', 'ico', 'bmp']


def is_valid_file(f_path):
    global g_valid_file_type
    if os.path.splitext(f_path)[1][1:] in g_valid_file_type:
        return True
    return False


def change_pic_file_to_ico(f_path, o_path):
    global g_default_size
    if not is_valid_file(f_path):
        print('Not a valid file type!')
        print('Valid file type' + g_valid_file_type)
        return False

    img = PythonMagick.Image(f_path)
    try:
        img.sample(g_default_size)
    except:
        print('Error size: ' + g_default_size)
        return False
    img.write(o_path)
    return True


def get_file_list_in_folder(f_path):
    file_list = []
    folder_list = []
    name_list = os.listdir(f_path)

    for name in name_list:
        t_path = os.path.join(f_path, name)
        if os.path.isfile(t_path):
            if is_valid_file(t_path):
                file_list.append(t_path)
            continue

        if os.path.isdir(t_path):
            folder_list.append(t_path)
            continue

        print("Unknown path type: " + t_path)

    for f in folder_list:
        file_list += get_file_list_in_folder(f)
    return file_list


def deal_folder(f_path):
    global g_output
    file_list = get_file_list_in_folder(f_path)
    for f in file_list:
        # 加1为了去除后面的反斜杠,防止join出错
        o_path = os.path.join(g_output, f[len(f_path) + 1:])
        o_path = os.path.splitext(o_path)[0] + '.ico'
        o_folder = os.path.split(o_path)[0]
        if not os.path.exists(o_folder):
            os.mkdir(o_folder)
        change_pic_file_to_ico(f, o_path)


def Usage(name):
    print('Usagee:')
    print('      ' + name + ' + <folder name, file name> + (size) + (output)')
    print('      ' + 'folder name, file name必选一个, size 默认 256x256,')
    print('      output默认与file name名相同,后缀为ico, 若输入为folder name,')
    print('      则在同级目录下新建同名+_ico的目录,生成的文件都放在此目录下')
    os.system('pause')


def main():
    global g_default_size, g_output
    if len(sys.argv) < 2:
        Usage(sys.argv[0])

    i_path = sys.argv[1]
    if not os.path.exists(i_path):
        print('Error: path not exist!')
        print(i_path)

    if len(sys.argv) > 2:
        g_default_size = sys.argv[2]

    if len(sys.argv) > 3:
        g_output = sys.argv[3]

    if os.path.isfile(i_path):
        if g_output == '':
            g_output = os.path.splitext(i_path)[0] + '.ico'
        change_pic_file_to_ico(i_path, g_output)

    if os.path.isdir(i_path):
        g_output = i_path + '_ico'
        deal_folder(i_path)


if __name__ == '__main__':
    main()

使用pyinstaller打包后的文件:

链接:https://pan.baidu.com/s/1GKyy23UQggm55amuGuWK_w  提取码:nhct

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值