Project Icon

samila

Python生成艺术库创造随机独特图像

Samila是一个Python生成艺术库,能基于数千个随机计算的点创建独特图像。它支持多种投影方式、标记类型和颜色选项,可生成富有表现力的艺术作品。Samila还提供图像保存、重现和NFT上传功能,方便数字艺术创作。每次生成的图像都呈现不同效果,为艺术家提供了无限可能。

概述

Samila是一个用Python编写的生成艺术生成器,它允许你基于数千个点创建图像。每个点的位置都由一个具有随机参数的公式计算得出。由于随机数的存在,每幅图像看起来都不同。

Open Hub
PyPI计数器
Github星标
分支masterdev
CI
代码质量codebeat badgeCodeFactor

安装

PyPI

源代码

Conda

使用

魔法

>>> import matplotlib.pyplot as plt
>>> from samila import GenerativeImage
>>> g = GenerativeImage()
>>> g.generate()
>>> g.plot()
>>> plt.show()
  • 你可以通过GenerativeImage中的func_seed参数更改函数生成种子

基础

>>> import random
>>> import math
>>> def f1(x, y):
    result = random.uniform(-1,1) * x**2  - math.sin(y**2) + abs(y-x)
    return result
>>> def f2(x, y):
    result = random.uniform(-1,1) * y**3 - math.cos(x**2) + 2*x
    return result
>>> g = GenerativeImage(f1, f2)
>>> g.generate()
>>> g.plot()
>>> g.seed
188781
>>> plt.show()

投影

>>> from samila import Projection
>>> g = GenerativeImage(f1, f2)
>>> g.generate()
>>> g.plot(projection=Projection.POLAR)
>>> g.seed
829730
>>> plt.show()
  • 支持的投影:RECTILINEAR, POLAR, AITOFF, HAMMER, LAMBERT, MOLLWEIDERANDOM
  • 默认投影为 RECTILINEAR

标记

>>> from samila import Marker
>>> g = GenerativeImage(f1, f2)
>>> g.generate()
>>> g.plot(marker=Marker.CIRCLE, spot_size=10)
>>> g.seed
448742
>>> plt.show()
  • 支持的标记:POINTPIXELCIRCLETRIANGLE_DOWNTRIANGLE_UPTRIANGLE_LEFTTRIANGLE_RIGHTTRI_DOWNTRI_UPTRI_LEFTTRI_RIGHTOCTAGONSQUAREPENTAGONPLUSPLUS_FILLEDSTARHEXAGON_VERTICALHEXAGON_HORIZONTALXX_FILLEDDIAMONDDIAMON_THINVLINEHLINERANDOM
  • 默认标记为POINT

旋转

你甚至可以使用rotation参数旋转你的艺术作品。输入你想要的图像旋转角度,你就能得到它。

>>> g = GenerativeImage(f1, f2)
>>> g.generate()
>>> g.plot(rotation=45)
  • 默认旋转角度为0

范围

>>> g = GenerativeImage(f1, f2)
>>> g.generate(start=-2*math.pi, step=0.01, stop=0)
>>> g.plot()
>>> g.seed
234752
>>> plt.show()

颜色

>>> g = GenerativeImage(f1, f2)
>>> g.generate()
>>> g.plot(color="yellow", bgcolor="black", projection=Projection.POLAR)
>>> g.seed
1018273
>>> plt.show()
  • 可用的颜色在VALID_COLORS列表中

  • colorbgcolor参数支持的格式:

    1. 颜色名称(例如:color="yellow"
    2. RGB/RGBA(例如:color=(0.1,0.1,0.1)color=(0.1,0.1,0.1,0.1)
    3. 十六进制(例如:color="#eeefff"
    4. 随机(例如:color="random"
    5. 补色(例如:color="complement", bgcolor="blue"
    6. 透明(例如:bgcolor="transparent"
    7. 列表(例如:color=["black", "#fffeef",...]

⚠️ 透明模式仅适用于背景

⚠️ 列表模式仅适用于颜色

⚠️ 在列表模式下,此列表的长度必须等于data1和data2的长度

点颜色

你可以制作自定义颜色映射并在Samila中使用它

>>> colorarray = [
...  [0.7, 0.2, 0.2, 1],
...  [0.6, 0.3, 0.2, 1],
...  "black",
...  [0.4, 0.4, 0.3, 1],
...  [0.3, 0.4, 0.4, 1],
...  "#ff2561"]
>>> g.generate()
>>> g.seed
454893
>>> g.plot(cmap=colorarray, color=g.data2, projection=Projection.POLAR)
>>> plt.show()

重新生成

>>> g = GenerativeImage(f1, f2)
>>> g.generate(seed=1018273)
>>> g.plot(projection=Projection.POLAR)
>>> plt.show()

NFT.storage

直接将生成的图像上传到NFT.storage

>>> g.nft_storage(api_key="YOUR_API_KEY", timeout=5000)
{'status': True, 'message': 'FILE_LINK'}

你也可以将配置/数据上传到NFT.storage,如下所示:

>>> g.nft_storage(api_key="API_KEY", upload_config=True)
{'status': {'image': True, 'config':True}, 'message': {'image':'IMAGE_FILE_LINK', 'config':'CONFIG_FILE_LINK'}

>>> g.nft_storage(api_key="API_KEY", upload_data=True)
{'status': {'image': True, 'data':True}, 'message': {'image':'IMAGE_FILE_LINK', 'data':'DATA_FILE_LINK'}

你可以选择特定的IPFS网关:

>>> from samila import Gateway
>>> g.nft_storage(api_key="API_KEY", upload_data=True, gateway=Gateway.DWEB)
{'status': {'image': True, 'data':True}, 'message': {'image':'IMAGE_FILE_LINK', 'data':'DATA_FILE_LINK'}
  • 默认超时时间为3000
  • 默认网关为IPFS_IO

保存图像

保存生成的图像

>>> g.save_image(file_adr="test.png")
{'status': True, 'message': 'FILE_PATH'}

以更高分辨率保存生成的图像

>>> g.save_image(file_adr="test.png", depth=5)
{'status': True, 'message': 'FILE_PATH'}

保存数据

保存生成的图像数据

>>> g.save_data(file_adr="data.json")
{'status': True, 'message': 'FILE_PATH'}

这样你之后可以通过以下方式将其加载到GenerativeImage实例中

>>> g = GenerativeImage(data=open('data.json', 'r'))

数据结构:

{
  "plot": {
    "projection": "polar",
    "bgcolor": "black",
    "color": "snow",
    "spot_size": 0.01
  },
  "matplotlib_version": "3.0.3",
  "data1": [
    0.3886741692042526,
    22.57390286376703,
    -0.1646310981668766,
    66.23632344600155
  ],
  "data2": [
    -0.14588750183600108,
    20.197945942677833,
    0.5485453260942901,
    -589.3284610518896
  ]
}

保存配置

保存生成的图像配置。它包含函数的字符串格式,也是人类可读的。

>>> g.save_config(file_adr="config.json")
{'status': True, 'message': 'FILE_PATH'}

这样你之后可以通过以下方式将其加载到GenerativeImage实例中

>>> g = GenerativeImage(config=open('config.json', 'r'))

配置结构:

{
    "matplotlib_version": "3.0.3",
    "generate": {
        "seed": 379184,
        "stop": 3.141592653589793,
        "step": 0.01,
        "start": -3.141592653589793
    },
    "f2": "random.uniform(-1,1)*math.cos(x*(y**3))+random.uniform(-1,1)*math.ceil(y-x)",
    "f1": "random.uniform(-1,1)*math.ceil(y)-random.uniform(-1,1)*y**2+random.uniform(-1,1)*abs(y-x)",
    "plot": {
        "color": "snow",
        "bgcolor": "black",
        "projection": "polar",
        "spot_size": 0.01
    }
}

数学细节

Samila 实质上是将笛卡尔坐标系中的方形空间转换为任意坐标系(如极坐标系)的变换。

示例

我们在第一个空间(左侧方形)中有一组点,可以定义如下:

以下函数用于转换:

>>> def f1(x, y):
    result = random.uniform(-1,1) * x**2 - math.sin(y**2) + abs(y-x)
    return result
>>> def f2(x, y):
    result = random.uniform(-1,1) * y**3 - math.cos(x**2) + 2*x
    return result

这里我们使用 Projection.POLAR,所以后面的空间将是极坐标空间,我们有:

>>> g = GenerativeImage(f1, f2)
>>> g.generate(seed=10)
>>> g.plot(projection=Projection.POLAR)

在浏览器中试用 Samila!

Samila 可以通过 Binder 或 Colab 服务在线使用交互式 Jupyter Notebooks!现在就来试试吧!:

Binder

Google Colab

  • 查看 examples 文件夹

问题与错误报告

只需填写一个 issue 并描述问题。我们会尽快检查!或发送电子邮件至 info@samila.site

  • 请完整填写 issue 模板

你也可以加入我们的 Discord 服务器

Discord 频道

社交媒体

  1. Instagram
  2. Telegram
  3. Twitter
  4. Discord

参考文献

1- Schönlieb, Carola-Bibiane, and Franz Schubert. "Random simulations for generative art construction–some examples." Journal of Mathematics and the Arts 7.1 (2013): 29-39.
2- 使用 R 创建生成艺术
3- NFT.storage : 免费去中心化存储和 NFT 带宽

致谢

本项目由 Protocol Labs 设立的 Next Step Microgrant 计划资助。

表示支持

为这个仓库点星

如果这个项目对你有帮助,请给一个 ⭐️!

为我们的项目捐款

如果你喜欢我们的项目,我们希望你能支持我们。我们的项目现在不是也永远不会以盈利为目的。我们需要这笔钱只是为了继续我们正在做的事情 ;-) 。

Samila 捐款

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号