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