news 2026/2/3 5:17:57

制作剪纸艺术壁纸生成器,选择图案和颜色,生成手机或电脑壁纸,定期更新款式。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
制作剪纸艺术壁纸生成器,选择图案和颜色,生成手机或电脑壁纸,定期更新款式。

我将为您开发一个剪纸艺术壁纸生成器。这个程序能够生成适合手机和电脑的剪纸风格壁纸,支持定期更新功能。

项目结构

paper_cutting_wallpaper/

├── main.py

├── wallpaper_generator.py

├── pattern_engine.py

├── color_schemes.py

├── layout_manager.py

├── updater.py

├── templates/

│ ├── phone_templates.py

│ ├── desktop_templates.py

│ └── seasonal_templates.py

├── assets/

│ ├── fonts/

│ └── textures/

├── output/

│ ├── phone/

│ └── desktop/

├── config/

│ ├── settings.json

│ └── schedules.json

├── logs/

└── README.md

1. config/settings.json

{

"version": "1.0.0",

"default_settings": {

"phone_resolution": {

"hd": [720, 1280],

"full_hd": [1080, 1920],

"qhd": [1440, 2560],

"4k": [2160, 3840]

},

"desktop_resolution": {

"hd": [1366, 768],

"full_hd": [1920, 1080],

"qhd": [2560, 1440],

"4k": [3840, 2160],

"ultra_wide": [3440, 1440]

}

},

"wallpaper_settings": {

"default_style": "traditional",

"default_color_scheme": "red_gold",

"auto_update_interval": 7,

"max_cache_size": 50,

"quality": "high"

},

"pattern_categories": {

"animals": ["dragon", "phoenix", "butterfly", "fish", "bird", "crane"],

"plants": ["flower", "bamboo", "pine", "lotus", "chrysanthemum"],

"symbols": ["fu", "shou", "xi", "cai", "longevity", "happiness"],

"festivals": ["spring_festival", "mid_autumn", "dragon_boat", "qingming"],

"seasons": ["spring", "summer", "autumn", "winter"]

}

}

2. pattern_engine.py (图案引擎)

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

"""

剪纸图案引擎模块

负责生成各种传统剪纸图案元素

"""

import math

import random

from typing import List, Tuple, Dict, Any, Optional

from enum import Enum

from dataclasses import dataclass

import json

class PatternCategory(Enum):

"""图案分类枚举"""

ANIMAL = "animals"

PLANT = "plants"

SYMBOL = "symbols"

FESTIVAL = "festivals"

SEASON = "seasons"

ABSTRACT = "abstract"

class PatternComplexity(Enum):

"""图案复杂度枚举"""

SIMPLE = "simple"

MEDIUM = "medium"

COMPLEX = "complex"

VERY_COMPLEX = "very_complex"

@dataclass

class PatternConfig:

"""图案配置数据类"""

name: str

category: PatternCategory

complexity: PatternComplexity

cultural_meaning: str

base_size: Tuple[int, int]

symmetry_type: str = "mirror"

color_palette: List[str] = None

class PaperCuttingPattern:

"""剪纸图案基类"""

def __init__(self, config: PatternConfig):

self.config = config

self.control_points = []

self.path_data = []

self.decorative_elements = []

self.primary_color = "#DC143C"

self.secondary_color = "#FFD700"

self.background_color = "#FFFFFF"

def generate_pattern(self, width: int, height: int,

color_scheme: Dict[str, str] = None) -> Dict[str, Any]:

"""生成图案的主要方法"""

if color_scheme:

self._apply_color_scheme(color_scheme)

# 计算图案位置和缩放

center_x, center_y = width // 2, height // 2

scale_factor = self._calculate_scale_factor(width, height)

# 生成主要图案路径

main_path = self._generate_main_path(center_x, center_y, scale_factor)

# 生成装饰元素

decorations = self._generate_decorations(center_x, center_y, scale_factor)

# 生成边框

border = self._generate_border(width, height)

return {

"main_path": main_path,

"decorations": decorations,

"border": border,

"background": self.background_color,

"primary_color": self.primary_color,

"secondary_color": self.secondary_color,

"metadata": {

"name": self.config.name,

"category": self.config.category.value,

"complexity": self.config.complexity.value,

"meaning": self.config.cultural_meaning,

"dimensions": (width, height)

}

}

def _calculate_scale_factor(self, width: int, height: int) -> float:

"""计算缩放因子"""

base_width, base_height = self.config.base_size

scale_x = width / base_width * 0.6 # 留边距

scale_y = height / base_height * 0.6

return min(scale_x, scale_y)

def _apply_color_scheme(self, color_scheme: Dict[str, str]):

"""应用配色方案"""

self.primary_color = color_scheme.get("primary", self.primary_color)

self.secondary_color = color_scheme.get("secondary", self.secondary_color)

self.background_color = color_scheme.get("background", self.background_color)

def _generate_main_path(self, center_x: float, center_y: float, scale: float) -> List[Tuple[float, float]]:

"""生成主要图案路径 - 子类必须实现"""

return []

def _generate_decorations(self, center_x: float, center_y: float, scale: float) -> List[Dict[str, Any]]:

"""生成装饰元素"""

decorations = []

# 根据复杂度添加装饰

if self.config.complexity in [PatternComplexity.MEDIUM, PatternComplexity.COMPLEX, PatternComplexity.VERY_COMPLEX]:

num_decorations = {

PatternComplexity.MEDIUM: 3,

PatternComplexity.COMPLEX: 6,

PatternComplexity.VERY_COMPLEX: 12

}[self.config.complexity]

for i in range(num_decorations):

angle = 2 * math.pi * i / num_decorations

distance = 80 * scale

dec_x = center_x + distance * math.cos(angle)

dec_y = center_y + distance * math.sin(angle)

decoration = {

"type": "small_flower",

"position": (dec_x, dec_y),

"size": 5 * scale,

"color": self.secondary_color if i % 2 == 0 else self.primary_color

}

decorations.append(decoration)

return decorations

def _generate_border(self, width: int, height: int) -> List[Tuple[float, float]]:

"""生成边框"""

margin = 20

return [

(margin, margin),

(width - margin, margin),

(width - margin, height - margin),

(margin, height - margin),

(margin, margin)

]

class DragonPattern(PaperCuttingPattern):

"""龙形图案"""

def __init__(self):

config = PatternConfig(

name="龙",

category=PatternCategory.ANIMAL,

complexity=PatternComplexity.COMPLEX,

cultural_meaning="权威、吉祥、力量",

base_size=(400, 300)

)

super().__init__(config)

self.primary_color = "#B22222"

self.secondary_color = "#FF6347"

def _generate_main_path(self, center_x: float, center_y: float, scale: float) -> List[Tuple[float, float]]:

points = []

segments = 20

# 龙头

head_points = [

(center_x, center_y - 60 * scale),

(center_x - 15 * scale, center_y - 45 * scale),

(center_x + 15 * scale, center_y - 45 * scale),

(center_x, center_y - 60 * scale)

]

points.extend(head_points)

# 龙身(波浪形)

for i in range(segments):

angle = math.pi * i / segments

wave_amplitude = 20 * scale

x = center_x + i * 8 * scale

y = center_y - 30 * scale + wave_amplitude * math.sin(angle * 2)

points.append((x, y))

# 龙尾

tail_points = [

(center_x + segments * 8 * scale, center_y + 10 * scale),

(center_x + segments * 8 * scale + 20 * scale, center_y),

(center_x + segments * 8 * scale + 20 * scale, center_y + 20 * scale),

(center_x + segments * 8 * scale, center_y + 10 * scale)

]

points.extend(tail_points)

return points

class PhoenixPattern(PaperCuttingPattern):

"""凤凰图案"""

def __init__(self):

config = PatternConfig(

name="凤凰",

category=PatternCategory.ANIMAL,

complexity=PatternComplexity.VERY_COMPLEX,

cultural_meaning="重生、高贵、美好",

base_size=(350, 400)

)

super().__init__(config)

self.primary_color = "#DC143C"

self.secondary_color = "#FFD700"

def _generate_main_path(self, center_x: float, center_y: float, scale: float) -> List[Tuple[float, float]]:

points = []

# 凤头

head = [

(center_x, center_y - 80 * scale),

(center_x - 12 * scale, center_y - 60 * scale),

(center_x + 12 * scale, center_y - 60 * scale),

(center_x, center_y - 80 * scale)

]

points.extend(head)

# 凤冠

crown = [

(center_x - 8 * scale, center_y - 80 * scale),

(center_x - 20 * scale, center_y - 90 * scale),

(center_x + 20 * scale, center_y - 90 * scale),

(center_x + 8 * scale, center_y - 80 * scale)

]

points.extend(crown)

# 凤身和翅膀

wing_points = []

for i in range(8):

angle = math.pi/4 + i * math.pi/4

outer_r = 60 * scale

inner_r = 30 * scale

# 外弧

outer_x = center_x + outer_r * math.cos(angle)

outer_y = center_y - 40 * scale + outer_r * math.sin(angle)

wing_points.append((outer_x, outer_y))

# 内弧

inner_x = center_x + inner_r * math.cos(angle)

inner_y = center_y - 40 * scale + inner_r * math.sin(angle)

wing_points.append((inner_x, inner_y))

points.extend(wing_points)

return points

class FlowerPattern(PaperCuttingPattern):

"""花卉图案"""

def __init__(self, flower_type: str = "peony"):

config = PatternConfig(

name=flower_type,

category=PatternCategory.PLANT,

complexity=PatternComplexity.MEDIUM,

cultural_meaning="富贵、美丽、繁荣",

base_size=(200, 200)

)

super().__init__(config)

self.flower_type = flower_type

self.primary_color = "#FF69B4"

self.secondary_color = "#FFB6C1"

def _generate_main_path(self, center_x: float, center_y: float, scale: float) -> List[Tuple[float, float]]:

points = []

petals = 5

petal_length = 40 * scale

# 花瓣

for i in range(petals):

angle = 2 * math.pi * i / petals

# 花瓣外轮廓

outer_points = [

(center_x, center_y),

(center_x + petal_length * 0.3 * math.cos(angle),

center_y + petal_length * 0.3 * math.sin(angle)),

(center_x + petal_length * math.cos(angle + 0.2),

center_y + petal_length * math.sin(angle + 0.2)),

(center_x + petal_length * 0.3 * math.cos(angle + 0.4),

center_y + petal_length * 0.3 * math.sin(angle + 0.4)),

(center_x, center_y)

]

points.extend(outer_points)

# 花心

center_circle = [

(center_x, center_y - 8 * scale),

(center_x + 8 * scale, center_y),

(center_x, center_y + 8 * scale),

(center_x - 8 * scale, center_y),

(center_x, center_y - 8 * scale)

]

points.extend(center_circle)

return points

class SymbolPattern(PaperCuttingPattern):

"""文字符号图案"""

def __init__(self, symbol: str):

meanings = {

"福": "福气、好运、幸福",

"寿": "长寿、健康、永恒",

"喜": "喜悦、庆祝、吉祥",

"财": "财富、繁荣、富足"

}

config = PatternConfig(

name=symbol,

category=PatternCategory.SYMBOL,

complexity=PatternComplexity.SIMPLE,

cultural_meaning=meanings.get(symbol, "吉祥如意"),

base_size=(150, 150)

)

super().__init__(config)

self.symbol = symbol

self.primary_color = "#8B0000"

self.secondary_color = "#FFD700"

def _generate_main_path(self, center_x: float, center_y: float, scale: float) -> List[Tuple[float, float]]:

# 简化的文字轮廓

if self.symbol == "福":

return self._generate_fu_symbol(center_x, center_y, scale)

elif self.symbol == "寿":

return self._generate_shou_symbol(center_x, center_y, scale)

elif self.symbol == "喜":

return self._generate_xi_symbol(center_x, center_y, scale)

elif self.symbol == "财":

return self._generate_cai_symbol(center_x, center_y, scale)

else:

return self._generate_generic_symbol(center_x, center_y, scale)

def _generate_fu_symbol(self, center_x: float, center_y: float, scale: float) -> List[Tuple[float, float]]:

# 福字简化轮廓

thickness = 8 * scale

size = 60 * scale

points = [

(center_x - size, center_y - size),

(center_x + size, center_y - size),

(center_x + size, center_y - size + thickness),

(center_x + size/3, center_y - size + thickness),

(center_x + size/3, center_y + size - thickness),

(center_x + size, center_y + size - thickness),

(center_x + size, center_y + size),

(center_x - size, center_y + size),

(center_x - size, center_y + size - thickness),

(center_x - size/3, center_y + size - thickness),

(center_x - size/3, center_y - size + thickness),

(center_x - size, center_y - size + thickness),

(center_x - size, center_y - size)

]

return points

def _generate_shou_symbol(self, center_x: float, center_y: float, scale: float) -> List[Tuple[float, float]]:

# 寿字简化轮廓

size = 50 * scale

points = [

(center_x, center_y - size),

(center_x + size/3, center_y - size/2),

(center_x + size/3, center_y + size/2),

(center_x, center_y + size),

(center_x - size/3, center_y + size/2),

(center_x - size/3, center_y - size/2),

(center_x, center_y - size)

]

return points

def _generate_xi_symbol(self, center_x: float, center_y: float, scale: float) -> List[Tuple[float, float]]:

# 喜字简化轮廓(两个口)

size = 40 * scale

spacing = 20 * scale

# 左口

left_mouth = [

(center_x - spacing - size, center_y - size),

(center_x - spacing + size, center_y - size),

(center_x - spacing + size, center_y + size),

(center_x - spacing - size, center_y + size),

(center_x - spacing - size, center_y - size)

]

# 右口

right_mouth = [

(center_x + spacing - size, center_y - size),

(center_x + spacing + size, center_y - size),

(center_x + spacing + size, center_y + size),

(center_x + spacing - size, center_y + size),

(center_x + spacing - size, center_y - size)

]

return left_mouth + right_mouth

def _generate_cai_symbol(self, center_x: float, center_y: float, scale: float) -> List[Tuple[float, float]]:

# 财字简化轮廓

size = 50 * scale

points = [

(center_x - size, center_y - size),

(center_x + size, center_y - size),

(center_x + size, center_y),

(center_x + size/2, center_y),

(center_x + size/2, center_y + size),

(center_x - size, center_y + size),

(center_x - size, center_y - size)

]

return points

def _generate_generic_symbol(self, center_x: float, center_y: float, scale: float) -> List[Tuple[float, float]]:

# 通用符号:圆形

radius = 40 * scale

points = []

segments = 16

for i in range(segments):

angle = 2 * math.pi * i / segments

x = center_x + radius * math.cos(angle)

y = center_y + radius * math.sin(angle)

points.append((x, y))

points.append(points[0]) # 闭合

return points

class PatternFactory:

"""图案工厂类"""

def __init__(self):

self.patterns = {

"dragon": DragonPattern,

"phoenix": PhoenixPattern,

"peony": lambda: FlowerPattern("peony"),

"chrysanthemum": lambda: FlowerPattern("chrysanthemum"),

"lotus": lambda: FlowerPattern("lotus"),

"fu": lambda: SymbolPattern("福"),

"shou": lambda: SymbolPattern("寿"),

"xi": lambda: SymbolPattern("喜"),

"cai": lambda: SymbolPattern("财")

}

def create_pattern(self, pattern_name: str) -> Optional[PaperCuttingPattern]:

"""创建图案实例"""

if pattern_name in self.patterns:

pattern_class = self.patterns[pattern_name]

if callable(pattern_class) and not isinstance(pattern_class, type):

return pattern_class()

else:

return pattern_class()

return None

def get_available_patterns(self) -> List[str]:

"""获取可用图案列表"""

return list(self.patterns.keys())

def get_patterns_by_category(self, category: PatternCategory) -> List[str]:

"""按分类获取图案"""

category_patterns = {

PatternCategory.ANIMAL: ["dragon", "phoenix"],

PatternCategory.PLANT: ["peony", "chrysanthemum", "lotus"],

PatternCategory.SYMBOL: ["fu", "shou", "xi", "cai"]

}

return category_patterns.get(category, [])

def create_random_pattern(self, category: PatternCategory = None) -> PaperCuttingPattern:

"""创建随机图案"""

if category:

available = self.get_patterns_by_category(category)

if available:

pattern_name = random.choice(available)

else:

pattern_name = random.choice(self.get_available_patterns())

else:

pattern_name = random.choice(self.get_available_patterns())

return self.create_pattern(pattern_name)

class PatternComposer:

"""图案组合器"""

def __init__(self):

self.factory = PatternFactory()

def compose_wallpaper_pattern(self, style: str, complexity: str = "medium") -> Dict[str, Any]:

"""组合壁纸图案"""

# 根据风格和复杂度选择图案

if style == "traditional":

if complexity in ["simple", "medium"]:

pattern_name = random.choice(["fu", "xi", "peony"])

else:

pattern_name = random.choice(["dragon", "phoenix"])

elif style == "modern":

pattern_name = random.choice(["lotus", "chrysanthemum", "shou"])

elif style == "festive":

pattern_name = random.choice(["fu", "dragon", "phoenix"])

else:

pattern_name = random.choice(self.factory.get_available_patterns())

pattern = self.factory.create_pattern(pattern_name)

if pattern:

return pattern.generate_pattern(400, 400)

else:

# 返回默认图案

default_pattern = SymbolPattern("福")

return default_pattern.generate_pattern(400, 400)

3. color_schemes.py (配色方案)

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

"""

剪纸艺术配色方案模块

提供传统和现代的配色方案

"""

from typing import Dict, List, Tuple

from enum import Enum

import json

class ColorSchemeType(Enum):

"""配色方案类型"""

TRADITIONAL = "traditional"

MODERN = "modern"

SEASONAL = "seasonal"

FESTIVE = "festive"

MINIMALIST = "minimalist"

class ColorPalette:

"""颜色调色板类"""

def __init__(self, name: str, colors: Dict[str, str], description: str = ""):

self.name = name

self.colors = colors

self.description = description

self.type = self._detect_type()

def _detect_type(self) -> ColorSchemeType:

"关注我,有更多实用程序等着你!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/3 5:07:05

【PHP边缘计算部署实战】:手把手教你将AI模型高效部署到边缘设备

第一章:PHP边缘计算与AI模型部署概述随着物联网设备和实时数据处理需求的激增,边缘计算已成为现代分布式系统架构的关键组成部分。PHP 作为一种广泛应用于Web开发的脚本语言,正逐步拓展其在边缘计算场景中的应用边界。通过将轻量级AI模型部署…

作者头像 李华
网站建设 2026/1/18 14:28:40

基于Word2Vec和LSTM实现微博评论情感分析

本文来源:k学长的深度学习宝库,点击查看源码&详细教程。深度学习,从入门到进阶,你想要的,都在这里。包含学习专栏、视频课程、论文源码、实战项目、云盘资源等。 项目包截图: 数据量较大,为…

作者头像 李华
网站建设 2026/2/2 18:28:23

接口性能测试—深入分析正则表达式提取器

JMeter正则表达式提取器的配置项中, "RegularExpression","Template"与"Match No."这三个配置项是比较难以理解的,本文针对这三个配置项设置进行深入分析,以便大家能够游刃有余的使用其功能. 一、JMeter使用的正则表达式 JMeter包含模式匹配工…

作者头像 李华
网站建设 2026/2/3 4:28:26

【独立看门狗IWDG】

工作原理:IWDG 是一个自由运行的递减计数器,时钟由独立 RC 振荡器(LSI)提供。启动后(写入 0xCCCC),计数器从 0xFFF 递减,若未及时喂狗(写入 0xAAAA)&#xff…

作者头像 李华
网站建设 2026/1/16 16:22:37

全面解析5D影院设备价格及4D座椅应用前景

5D影院设备市场价格全面解析 当前市场上,5D影院设备的价格差异显著,主要取决于多个因素,如技术配置、座椅数量和环境特效类型。一般来说,基础设备的价格在10万元至50万元不等,而全配置的高端设备可能达到百万元以上。尤…

作者头像 李华