[萌新]python小程序实现Pic2Icon转换

本文介绍了一个使用Python编写的Pic2Icon小程序,该程序可以将普通图片转换为*.ico图标文件。通过双击运行,将图片拖入命令行即可完成转换,输出的图标存放在Output_Icon文件夹。文章详细讲述了代码实现过程,包括使用numpy、PIL和opencv库进行图片处理的步骤,以及在编写过程中遇到的挑战和解决方案。
摘要由CSDN通过智能技术生成

python小程序实现Pic2Icon转换


前言

该程序用来将普通格式的图片转换成*.ico系统可用图标文件。你可以将转换出的图标用于设置文件夹图标、快捷方式图标、程序图标等其他用途。
做程序的契机是前两天在用pipinstaller做python软件的时候发现一个小问题,
pipinstaller命令有一个参数:-i +icon图片路径
可以指定打包制成的*.exe系统执行文件的图标显示,但是这个icon图片的格式只能是*.ico。如果需要自定义一张图片作为程序的图标,可能就需要自己找图片转icon的网站进行转换。度娘提供的前几个网站着实不太行,分辨率、形变度感人。
于是估摸着自己写个小程序实现图片的转化。


提示:
本文第一部分是软件使用步骤的描述,软件已经打包成可执行程序发布在Github上,不需要用户拥有python和相关的模块。
GitHub相关项目release链接
本文第二部分是代码的说明,包括作者写该代码的一些经历。因为相关的文章比较少而且有很多都过时了,所以这次的编写还是很费精力的,把过程写出来也比较有趣。

一、程序使用步骤

程序下载地址https://github.com/NNUwdl/Pic2Icon/releases/tag/0.1_Version

1.双击打开程序,等待命令行弹出提示信息。

在这里插入图片描述

2.将所要转换的图片的文件拖入命令框后按下回车,等待程序执行完毕。

在这里插入图片描述
在这里插入图片描述

3.程序会将icon图标输出到图片所在目录的Output_Icon文件夹下。

在这里插入图片描述


简单介绍下如何改变文件夹、快捷方式的图标:1.右键打开文件夹的属性 2.打开自定义选项更改文件夹的图标 3.在弹出的对话框中选择"浏览",选择需要替换成的图片,再点击应用就可以了。
在这里插入图片描述

二、代码说明

源代码展示

1.导入库

这里主要用到模块的是numpy、pillow、opencv和os:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/11/3 1:08
# @Author  : Xilun Wu
# @email   : nnuwxl@gmail.com
# @File    : Pic2Icon.py
import os
from PIL import Image
import numpy as np
import cv2
import sys
import time


class Picture:
    def __init__(self, file):
        self.ext = ['jpg', 'jpeg', 'png']
        self.files = [file]
        self.savepath = ""

    def handle_picture(self, file):
        print("Converting to four channel RGBA images...")
        time.sleep(0.5)

        img = Image.open(file).convert('RGBA')
        width = img.size[0]
        height = img.size[1]
        x = width / height
        matrix = np.asarray(img)
        print("The image resolution is being sampled at 2048x2048 size...")
        time.sleep(0.5)

        if width >= height:
            matrix = cv2.resize(matrix, (2048, int(2048 / x)))
            m = np.zeros((2048, 2048, 4), dtype=np.int)
            a = int(2048 / x)
            b = int((2048 - a) / 2)
            for i1 in range(2048):
                for i2 in range(2048):
                    if i1 >= b and i1 < b + a:
                        m[i1][i2] = m[i1][i2] + matrix[i1 - b][i2]


        
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值