自动化办公001-找了半天,还不如自己写一个图片转ico格式的程序

关于jpg、png等图片转ICO格式

最近突然急需一张ico格式的文件,就拿着处理好的png图片出网上找在线转换器,找了一个小时,绝了,不是需要注册充钱就是下载不下来,好不容易下载下来还是个文件错误。想着找个PS插件直接导出ico,也是服气,不是钓鱼网站就是下载下来用不了……

当然你们有好的方式也可以留言告诉我,心态崩了,索性写一个。

一、程序展示

直接选择需要转换的文件,输入尺寸点击转换就可以了,第五出品,质量问题你打我,文章末尾给大家提供有下载渠道,免费的!
在这里插入图片描述
会给大家一个压缩包,压缩包里有这三样东西:
在这里插入图片描述
直接双击exe文件就可以了,如果想研究下源码,最后一个文件就是源码。

二、关于源码

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QPushButton, QLabel,
                             QFileDialog, QHBoxLayout, QLineEdit, QGridLayout, QSpinBox, QMessageBox)
from PyQt5.QtGui import QIcon
from PIL import Image

class ImageToIcoConverter(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    
    def initUI(self):
        self.setWindowTitle('图片转 ICO 文件')
        self.setGeometry(100, 100, 500, 250)
        self.setWindowIcon(QIcon('icon.png'))  # 设置应用图标

        layout = QVBoxLayout()

        # 图片选择
        self.fileLabel = QLabel('选择图片文件:')
        self.filePath = QLineEdit()
        self.browseButton = QPushButton('浏览...')
        self.browseButton.clicked.connect(self.browseImage)
        
        fileLayout = QHBoxLayout()
        fileLayout.addWidget(self.fileLabel)
        fileLayout.addWidget(self.filePath)
        fileLayout.addWidget(self.browseButton)
        
        layout.addLayout(fileLayout)

        # 输出路径
        self.outputLabel = QLabel('保存为 ICO 文件:')
        self.outputPath = QLineEdit()
        self.saveButton = QPushButton('保存为...')
        self.saveButton.clicked.connect(self.saveAsIco)
        
        outputLayout = QHBoxLayout()
        outputLayout.addWidget(self.outputLabel)
        outputLayout.addWidget(self.outputPath)
        outputLayout.addWidget(self.saveButton)
        
        layout.addLayout(outputLayout)

        # 尺寸输入
        self.sizeLabel = QLabel('输出方形尺寸 (例如: 16 32 48 256等):')
        self.sizeInput = QLineEdit()
        
        sizeLayout = QHBoxLayout()
        sizeLayout.addWidget(self.sizeLabel)
        sizeLayout.addWidget(self.sizeInput)
        
        layout.addLayout(sizeLayout)

        # 转换按钮
        self.convertButton = QPushButton('转换')
        self.convertButton.clicked.connect(self.convertImage)
        layout.addWidget(self.convertButton)

        # 状态显示
        self.statusLabel = QLabel('')
        layout.addWidget(self.statusLabel)
        
        self.setLayout(layout)

    def browseImage(self):
        fileName, _ = QFileDialog.getOpenFileName(self, '选择图片文件', '', 'Image Files (*.png *.jpg *.jpeg *.bmp)')
        if fileName:
            self.filePath.setText(fileName)

    def saveAsIco(self):
        fileName, _ = QFileDialog.getSaveFileName(self, '保存为 ICO 文件', '', 'ICO Files (*.ico)')
        if fileName:
            if not fileName.endswith('.ico'):
                fileName += '.ico'
            self.outputPath.setText(fileName)
    
    def convertImage(self):
        input_path = self.filePath.text()
        output_path = self.outputPath.text()
        sizes_str = self.sizeInput.text().strip()
        
        if not input_path or not output_path:
            self.statusLabel.setText('请指定输入图片和输出路径')
            return

        try:
            sizes = [int(size) for size in sizes_str.split() if size.isdigit()]
            sizes = [(size, size) for size in sizes if size > 0]
            
            if not sizes:
                self.statusLabel.setText('请至少输入一个有效的尺寸')
                return

            img = Image.open(input_path)
            img.save(output_path, format='ICO', sizes=sizes)
            self.statusLabel.setText(f'转换成功,保存为 {output_path}')
            QMessageBox.information(self, "成功", f"转换成功,保存为 {output_path}")
        except Exception as e:
            self.statusLabel.setText(f'转换失败: {e}')
            QMessageBox.critical(self, "错误", f"转换失败: {e}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = ImageToIcoConverter()
    window.show()
    sys.exit(app.exec_())

三、注意事项

  1. ico文件是正方形的,所以输入尺寸的时候只需要一个数字就行,比如16,32,48,76,到250,根据需要自己随意输入,不要超过250,文件写入可能会失败,也不要输入其他内容,我没有写过多的防护措施(小数没试过,大家可以帮我试试会不会闪退);
  2. 其他没啥,遇到问题可以在下边评论(我看到后回复)。

四、下载资源

为了方便一堆资料的管理,照例还是放在公众号里,呐,关注后回复“图片转ico”就可以获取,没有套路。
在这里插入图片描述
最后来一个公众号二维码:
请添加图片描述
请添加图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值