纯色图片生成器
就是在测试代码的时候有时候会用到一些纯色的图片进行测试,后面突发奇想才搞了一个纯色生成器玩玩,有需要的可以三连自取哦~
一键生成高清纯色背景,满足设计、演示、测试需求。支持自定义颜色代码,快速导出PNG。
效果如下:
代码如下:
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,QLabel, QSlider, QPushButton, QColorDialog, QSpinBox, QFileDialog
)
from PyQt5.QtGui import QColor, QImage, QPixmap
from PyQt5.QtCore import Qtclass SolidColorGenerator(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("纯色图片生成器")self.setGeometry(100, 100, 500, 400)# 初始化变量self.width = 400self.height = 300self.color = QColor(255, 0, 0) # 默认红色# 创建主部件和布局main_widget = QWidget()main_layout = QVBoxLayout()# 预览区域self.preview_label = QLabel()self.preview_label.setAlignment(Qt.AlignCenter)self.preview_label.setMinimumHeight(200)self.preview_label.setStyleSheet("border: 1px solid gray;")main_layout.addWidget(self.preview_label)# 尺寸控制size_layout = QHBoxLayout()size_layout.addWidget(QLabel("宽度:"))self.width_spin = QSpinBox()self.width_spin.setRange(1, 5000)self.width_spin.setValue(self.width)self.width_spin.valueChanged.connect(self.update_size)size_layout.addWidget(self.width_spin)size_layout.addWidget(QLabel("高度:"))self.height_spin = QSpinBox()self.height_spin.setRange(1, 5000)self.height_spin.setValue(self.height)self.height_spin.valueChanged.connect(self.update_size)size_layout.addWidget(self.height_spin)main_layout.addLayout(size_layout)# 颜色控制color_layout = QHBoxLayout()self.color_label = QLabel("当前颜色: ")self.color_label.setStyleSheet(f"background-color: {self.color.name()};")color_layout.addWidget(self.color_label)self.color_button = QPushButton("选择颜色")self.color_button.clicked.connect(self.choose_color)color_layout.addWidget(self.color_button)main_layout.addLayout(color_layout)# RGB滑块rgb_layout = QVBoxLayout()# 红色滑块red_layout = QHBoxLayout()red_layout.addWidget(QLabel("红:"))self.red_slider = QSlider(Qt.Horizontal)self.red_slider.setRange(0, 255)self.red_slider.setValue(self.color.red())self.red_slider.valueChanged.connect(self.update_color_from_sliders)red_layout.addWidget(self.red_slider)rgb_layout.addLayout(red_layout)# 绿色滑块green_layout = QHBoxLayout()green_layout.addWidget(QLabel("绿:"))self.green_slider = QSlider(Qt.Horizontal)self.green_slider.setRange(0, 255)self.green_slider.setValue(self.color.green())self.green_slider.valueChanged.connect(self.update_color_from_sliders)green_layout.addWidget(self.green_slider)rgb_layout.addLayout(green_layout)# 蓝色滑块blue_layout = QHBoxLayout()blue_layout.addWidget(QLabel("蓝:"))self.blue_slider = QSlider(Qt.Horizontal)self.blue_slider.setRange(0, 255)self.blue_slider.setValue(self.color.blue())self.blue_slider.valueChanged.connect(self.update_color_from_sliders)blue_layout.addWidget(self.blue_slider)rgb_layout.addLayout(blue_layout)main_layout.addLayout(rgb_layout)# 保存按钮self.save_button = QPushButton("保存图片")self.save_button.clicked.connect(self.save_image)main_layout.addWidget(self.save_button)main_widget.setLayout(main_layout)self.setCentralWidget(main_widget)# 初始更新self.update_preview()def update_size(self):"""更新图像尺寸"""self.width = self.width_spin.value()self.height = self.height_spin.value()self.update_preview()def choose_color(self):"""打开颜色选择对话框"""new_color = QColorDialog.getColor(self.color, self, "选择颜色")if new_color.isValid():self.color = new_colorself.red_slider.setValue(self.color.red())self.green_slider.setValue(self.color.green())self.blue_slider.setValue(self.color.blue())self.update_preview()def update_color_from_sliders(self):"""根据滑块更新颜色"""self.color.setRed(self.red_slider.value())self.color.setGreen(self.green_slider.value())self.color.setBlue(self.blue_slider.value())self.update_preview()def update_preview(self):"""更新预览区域"""# 更新颜色标签self.color_label.setStyleSheet(f"""background-color: {self.color.name()};border: 1px solid gray;padding: 5px;""")self.color_label.setText(f"当前颜色: {self.color.name()}")# 创建预览图像preview_width = min(self.width, 400)preview_height = min(self.height, 300)# 创建预览图像preview_image = QImage(preview_width, preview_height, QImage.Format_RGB32)preview_image.fill(self.color)# 显示预览self.preview_label.setPixmap(QPixmap.fromImage(preview_image))# 显示尺寸信息self.preview_label.setToolTip(f"预览尺寸: {preview_width}x{preview_height}\n"f"实际保存尺寸: {self.width}x{self.height}")def save_image(self):"""保存图片到文件"""options = QFileDialog.Options()file_name, _ = QFileDialog.getSaveFileName(self, "保存图片", "","PNG图片 (*.png);;JPEG图片 (*.jpg *.jpeg);;所有文件 (*)",options=options)if file_name:# 创建全尺寸图像image = QImage(self.width, self.height, QImage.Format_RGB32)image.fill(self.color)# 根据文件扩展名确定格式if file_name.lower().endswith('.jpg') or file_name.lower().endswith('.jpeg'):format = 'JPG'else:format = 'PNG' # 默认为PNGif image.save(file_name, format):self.statusBar().showMessage(f"图片已保存到: {file_name}", 5000)else:self.statusBar().showMessage(f"保存失败: {file_name}", 5000)if __name__ == "__main__":app = QApplication(sys.argv)window = SolidColorGenerator()window.show()sys.exit(app.exec_())
各位要是有啥有趣好玩的其他想法的可以评论区聊聊天哈~