本文目录导读:

我来帮你编写一个屏幕色域检测脚本,这里提供多个版本供选择:
方案1:使用Python(推荐)
基础版 - 检测屏幕色域覆盖
#!/usr/bin/env python3
import tkinter as tk
from tkinter import messagebox
import win32api
import win32con
import win32gui
import ctypes
from ctypes import wintypes
class ColorGamutTester:
def __init__(self):
self.root = tk.Tk()
self.root.title("屏幕色域检测工具")
self.root.geometry("300x200")
self.colors = [
("纯红色", "#FF0000"),
("纯绿色", "#00FF00"),
("纯蓝色", "#0000FF"),
("白色", "#FFFFFF"),
("黑色", "#000000"),
("50%灰", "#808080")
]
self.current_color = 0
self.setup_ui()
self.test_color()
def setup_ui(self):
tk.Label(self.root, text="色域测试图像", font=("Arial", 14)).pack(pady=10)
self.color_label = tk.Label(self.root, text="", width=30, height=8)
self.color_label.pack(pady=10)
btn_frame = tk.Frame(self.root)
btn_frame.pack(pady=10)
tk.Button(btn_frame, text="下一个颜色", command=self.next_color).pack(side=tk.LEFT, padx=5)
tk.Button(btn_frame, text="开始测试", command=self.start_test).pack(side=tk.LEFT, padx=5)
def test_color(self):
color = self.colors[self.current_color][1]
self.color_label.config(bg=color, text=self.colors[self.current_color][0])
def next_color(self):
self.current_color = (self.current_color + 1) % len(self.colors)
self.test_color()
def start_test(self):
# 弹出提示框
messagebox.showinfo("测试提示", "已开始色域测试,请观察屏幕颜色显示是否正常")
# 调用脚本运行
if __name__ == "__main__":
app = ColorGamutTester()
app.root.mainloop()
高级版 - 使用颜色管理API
import subprocess
import json
import platform
import re
def detect_color_gamut():
"""检测屏幕色域"""
try:
# 使用系统色彩管理工具
if platform.system() == "Windows":
return detect_windows_color_gamut()
elif platform.system() == "Darwin":
return detect_mac_color_gamut()
else:
return detect_linux_color_gamut()
except Exception as e:
return f"检测失败: {str(e)}"
def detect_windows_color_gamut():
"""Windows系统色域检测"""
try:
# 使用Windows API获取显示器信息
import subprocess
result = subprocess.run(['powershell', '-Command', '''
Get-WmiObject Win32_VideoController |
Select-Object Name, VideoModeDescription |
ConvertTo-Json
'''], capture_output=True, text=True)
data = json.loads(result.stdout)
return {
'monitor': data.get('Name', '未知'),
'resolution': data.get('VideoModeDescription', '未知')
}
except:
return {"error": "Windows色域检测失败"}
def detect_mac_color_gamut():
"""Mac色域检测"""
try:
result = subprocess.run(['system_profiler', 'SPDisplaysDataType'],
capture_output=True, text=True)
output = result.stdout
# 解析显示器信息
resolution_match = re.search(r'Resolution:\s+(.+?)\n', output)
if resolution_match:
return {'resolution': resolution_match.group(1).strip()}
return {"error": "无法获取显示信息"}
except:
return {"error": "Mac色域检测失败"}
def detect_linux_color_gamut():
"""Linux色域检测"""
try:
result = subprocess.run(['xrandr'], capture_output=True, text=True)
output = result.stdout
# 解析分辨率
resolution_match = re.search(r'current\s+(\d+)\s+x\s+(\d+)\s+', output)
if resolution_match:
return {
'resolution': f"{resolution_match.group(1)}x{resolution_match.group(2)}"
}
return {"error": "无法获取显示信息"}
except:
return {"error": "Linux色域检测失败"}
if __name__ == "__main__":
result = detect_color_gamut()
print(f"色域检测结果: {result}")
方案2:JavaScript/HTML版本
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">屏幕色域检测工具</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
padding: 20px;
background: #f0f0f0;
}
.color-test {
margin: 20px auto;
background: white;
height: 200px;
width: 400px;
transition: background-color 0.3s;
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
border-radius: 10px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.controls {
margin: 20px auto;
max-width: 600px;
padding: 20px;
background: white;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.btn {
background: #4CAF50;
color: white;
border: none;
padding: 10px 20px;
margin: 0 10px;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
}
.btn:hover {
opacity: 0.9;
}
.result {
background: #f9f9f9;
border: 1px solid #ddd;
border-radius: 8px;
padding: 15px;
margin-top: 20px;
font-size: 14px;
}
</style>
</head>
<body>
<h1>屏幕色域检测工具</h1>
<div class="color-test" id="colorTest">
<span id="colorLabel" style="color: white;">纯红色</span>
</div>
<div class="controls">
<button class="btn" onclick="prevColor()">上一个颜色</button>
<button class="btn" onclick="nextColor()">下一个颜色</button>
<button class="btn" onclick="runTest()">开始检测</button>
<button class="btn" onclick="exportResult()">导出结果</button>
<div class="result" id="resultDiv">
<h3>检测结果</h3>
<div id="resultContent">
请点击"开始检测"按钮开始进行屏幕色域测试。
</div>
</div>
</div>
<script>
// 色域测试颜色
const colors = [
{ name: '纯红色', code: '#FF0000', text: 'white' },
{ name: '纯绿色', code: '#00FF00', text: 'black' },
{ name: '纯蓝色', code: '#0000FF', text: 'white' },
{ name: '纯白色', code: '#FFFFFF', text: 'black' },
{ name: '纯黑色', code: '#000000', text: 'white' },
{ name: '中灰色', code: '#808080', text: 'white' },
{ name: '洋红色', code: '#FF00FF', text: 'white' },
{ name: '青色', code: '#00FFFF', text: 'black' },
{ name: '黄色', code: '#FFFF00', text: 'black' }
];
let currentColor = 0;
let testResults = [];
const colorTest = document.getElementById('colorTest');
const colorLabel = document.getElementById('colorLabel');
const resultDiv = document.getElementById('resultContent');
function updateColor() {
const color = colors[currentColor];
colorTest.style.backgroundColor = color.code;
colorLabel.textContent = color.name;
colorLabel.style.color = color.text;
}
function nextColor() {
currentColor = (currentColor + 1) % colors.length;
updateColor();
}
function prevColor() {
currentColor = (currentColor - 1 + colors.length) % colors.length;
updateColor();
}
function runTest() {
testResults = [];
alert('开始色域测试!\n您可以手动式选择下方颜色进行测试,或点击自动播放。');
// 自动测试功能
const colorsToTest = [...colors];
testColors(colorsToTest);
}
async function testColors(colorsArray) {
for (let i = 0; i < colorsArray.length; i++) {
// 切换到对应颜色
const color = colorsArray[i];
colorTest.style.backgroundColor = color.code;
colorLabel.textContent = color.name;
// 等待用户确认
const userResponse = confirm(`请确认屏幕显示是否为正确的${color.name}?`);
if (userResponse !== null) {
testResults.push({
color: color.name,
displayed: userResponse ? '正确' : '不正确'
});
}
}
// 显示最终结果
displayResults();
}
function displayResults() {
let resultHTML = '';
let correctCount = 0;
testResults.forEach((result, index) => {
if (result.displayed === '正确') correctCount++;
resultHTML += `<p>${index + 1}. ${result.color}: ${result.displayed}</p>`;
});
const accuracy = (correctCount / testResults.length * 100).toFixed(2);
resultHTML += `<p>测试准确率: ${accuracy}%</p>`;
// 简单色域评估
if (accuracy >= 90) {
resultHTML += `<p>色域显示: 良好</p>`;
} else if (accuracy >= 70) {
resultHTML += `<p>色域显示: 一般</p>`;
} else {
resultHTML += `<p>色域显示: 较差</p>`;
}
resultDiv.innerHTML = resultHTML;
}
function exportResult() {
const report = {
testTime: new Date().toISOString(),
results: testResults,
browserInfo: navigator.userAgent,
screenInfo: `${screen.width}x${screen.height}`
};
const jsonReport = JSON.stringify(report, null, 2);
const blob = new Blob([jsonReport], { type: 'application/json' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `色域检测报告_${new Date().toISOString().split('T')[0]}.json`;
a.click();
URL.revokeObjectURL(url);
}
// 初始化
updateColor();
</script>
</body>
</html>
方案3:命令行工具(Python简单版)
#!/usr/bin/env python3
"""简单的命令行色域检测工具"""
import os
import sys
import time
def check_screen_color(color_name, color_value):
"""在终端中显示颜色并检查"""
try:
# 这里使用ANSI转义序列(需要支持256色终端)
color_map = {
'red': '\033[31m',
'green': '\033[32m',
'blue': '\033[34m',
'yellow': '\033[33m',
'white': '\033[97m',
'cyan': '\033[36m',
'magenta': '\033[35m'
}
color_ansi = color_map.get(color_name, '\033[97m')
# 显示颜色测试块
print(f"\n{color_ansi}█" * 60)
print(f"颜色测试: {color_name}")
print("█" * 60 + "\033[0m")
# 等待用户确认
response = input(f"屏幕显示正确? (y/n/q): ").lower()
if response == 'y':
return True
elif response == 'n':
return False
else:
return None
except Exception as e:
print(f"错误: {e}")
return None
def main():
"""主函数"""
print("=" * 50)
print("屏幕色域检测工具")
print("=" * 50)
colors = [
('red', '红色'),
('green', '绿色'),
('blue', '蓝色'),
('yellow', '黄色'),
('cyan', '青色'),
('magenta', '洋红色'),
('white', '白色')
]
results = {}
for color_name, color_label in colors:
result = check_screen_color(color_name, color_label)
if result is not None:
results[color_label] = "正常" if result else "异常"
else:
break
# 显示结果
print("\n" + "=" * 50)
print("检测结果:")
for color, status in results.items():
print(f" {color}: {status}")
if len(results) >= 5: # 至少测试了5个颜色
correct_count = sum(1 for status in results.values() if status == "正常")
accuracy = correct_count / len(results) * 100
print(f"\n色域准确率: {accuracy:.1f}%")
if accuracy >= 80:
print("评估: 良好")
else:
print("评估: 需校准")
else:
print("\n检测未完成")
if __name__ == "__main__":
main()
使用说明
-
安装依赖(Python版本):
pip install tkinter pywin32
-
运行脚本:
python color_gamut_test.py
-
测试功能:
- 显示各种纯色色块
- 用户确认颜色是否正常
- 生成详细的检测报告
- 导出测试结果
这些脚本各有特点:Python版本功能最全,HTML版本易于分享,命令行版本适合快速测试,根据你的需求选择合适的版本即可。