纯色图片生成器

就是在测试代码的时候有时候会用到一些纯色的图片进行测试,后面突发奇想才搞了一个纯色生成器玩玩,有需要的可以三连自取哦~

一键生成高清纯色背景,满足设计、演示、测试需求。支持自定义颜色代码,快速导出PNG。


效果如下:
纯色图片生成器_第1张图片


代码如下:

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 Qt


class SolidColorGenerator(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("纯色图片生成器")
        self.setGeometry(100, 100, 500, 400)

        # 初始化变量
        self.width = 400
        self.height = 300
        self.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_color
            self.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'  # 默认为PNG

            if 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_())

各位要是有啥有趣好玩的其他想法的可以评论区聊聊天哈~

你可能感兴趣的:(人工智能,pyqt)