关于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 Imageclass 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('请指定输入图片和输出路径')returntry: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('请至少输入一个有效的尺寸')returnimg = 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_())
三、注意事项
- ico文件是正方形的,所以输入尺寸的时候只需要一个数字就行,比如16,32,48,76,到250,根据需要自己随意输入,不要超过250,文件写入可能会失败,也不要输入其他内容,我没有写过多的防护措施(小数没试过,大家可以帮我试试会不会闪退);
- 其他没啥,遇到问题可以在下边评论(我看到后回复)。
四、下载资源
为了方便一堆资料的管理,照例还是放在公众号里,呐,关注后回复“图片转ico”就可以获取,没有套路。
最后来一个公众号二维码: