前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >批量生成独一无二的NFT猫猫图,这项目王多鱼会投吗?

批量生成独一无二的NFT猫猫图,这项目王多鱼会投吗?

作者头像
Regan Yue
发布2021-11-10 11:05:36
发布2021-11-10 11:05:36
89500
代码可运行
举报
文章被收录于专栏:ReganYue's BlogReganYue's Blog
运行总次数:0
代码可运行

批量生成独一无二的NFT猫猫图,这项目王多鱼会投吗?

前言

之前在新闻看到一个小朋友暑假期间靠卖NFT鲸鱼“表情包”赚了250万元。另外他还将这个NFT图片生成器开源了,今天我们就基于他的这个开源工具来生成猫猫表情包。开源工具链接在文章结尾。

一、设置合成部件的权重

代码语言:javascript
代码运行次数:0
运行
复制
cat = ["01","02","03","04","05","06","07"]
cat_weights = [10, 40, 15, 5, 10, 10, 10]

title = ["01","02","03","04"]
title_weights = [20, 40, 15, 15]

我们这里分别有7张和4张猫咪图片。我们要将这7张猫咪与4张猫咪排列组合,生成独一无二的图片。

P.S. 这里权重之和要是100.

二、每一张图片对应的文件名

代码语言:javascript
代码运行次数:0
运行
复制
cat_files = {
    "01": "cat1",
    "02": "cat2",
    "03": "cat3",
    "04": "cat4",
    "05": "cat5",
    "06": "cat6",
    "07": "cat7"
}

title_files = {
    "01": "title01",
    "02": "title02",
    "03": "title03",
    "04": "title04"
}

我们是将文件夹中的文件名放入字典中。

三、随即生成基于权重的图片组合

代码语言:javascript
代码运行次数:0
运行
复制
TOTAL_IMAGES = 10 # Number of random unique images we want to generate

all_images = [] 

# A recursive function to generate unique image combinations
def create_new_image():
    
    new_image = {} #

    # For each trait category, select a random trait based on the weightings 

    new_image ["Cat"] = random.choices(cat, cat_weights)[0]
    new_image ["Title"] = random.choices(title, title_weights)[0]
    
    if new_image in all_images:
        return create_new_image()
    else:
        return new_image
    
    
# Generate the unique combinations based on trait weightings
for i in range(TOTAL_IMAGES): 
    
    new_trait_image = create_new_image()
    
    all_images.append(new_trait_image)

TOTAL_IMAGES这个变量是我们要生成的最大图片数量。

create_new_image是利用递归,对于每个图片类别都根据权重随机选择一张图片。

四、判断所有的图片是否独特

代码语言:javascript
代码运行次数:0
运行
复制
def all_images_unique(all_images):
    seen = list()
    return not any(i in seen or seen.append(i) for i in all_images)

print("Are all images unique?", all_images_unique(all_images))

这里我们遍历所有图片来判断是否有重复图片。

五、为每一张图片添加Token Id

代码语言:javascript
代码运行次数:0
运行
复制
# Add token Id to each image
i = 0
for item in all_images:
    item["tokenId"] = i
    i = i + 1
print(all_images)

这之后all_images中内容是:

代码语言:javascript
代码运行次数:0
运行
复制
[{'Cat': '05', 'Title': '01', 'tokenId': 0}, {'Cat': '02', 'Title': '04', 'tokenId': 1}, {'Cat': '01', 'Title': '03', 'tokenId': 2}, {'Cat': '01', 'Title': '02', 'tokenId': 3}, {'Cat': '02', 'Title': '03', 'tokenId': 4}, {'Cat': '07', 'Title': '02', 'tokenId': 5}, {'Cat': '02', 'Title': '02', 'tokenId': 6}, {'Cat': '07', 'Title': '01', 'tokenId': 7}, {'Cat': '03', 'Title': '02', 'tokenId': 8}, {'Cat': '05', 'Title': '02', 'tokenId': 9}]

包含tokenId和两种猫的图片。

六、获取图片使用的数量

代码语言:javascript
代码运行次数:0
运行
复制
# Get Trait Counts

    
title_count = {}
for item in title:
    title_count[item] = 0

cat_count = {}
for item in cat:
    cat_count[item] = 0

for image in all_images:
    cat_count[image["Cat"]] += 1
    title_count[image["Title"]] += 1
    
print(cat_count)
print(title_count)

使用字典来存储各个图片被使用的次数。

七、拼凑图片

代码语言:javascript
代码运行次数:0
运行
复制
#### Generate Images    
for item in all_images:

    im1 = Image.open(f'./trait-layers/cat/{cat_files[item["Cat"]]}.png').convert('RGBA')
    im2 = Image.open(f'./trait-layers/title/{title_files[item["Title"]]}.png').convert('RGBA')
    
    im1 = im1.resize((400, 400))
    im2 = im2.resize((400, 400))
    #Create each composite

    com = Image.alpha_composite(im1, im2)
    
    #Convert to RGB
    rgb_im = com.convert('RGB')
    file_name = str(item["tokenId"]) + ".png"
    rgb_im.save("./images/" + file_name)

这里的思路很简单,将图片转化为同一尺寸,然后利用Image.alpha_composite将其叠加,然后在根据tokenId来保存图片。

八、来欣赏一下我生成的独一无二的图片吧~

我们本项目是基于Benyamin Ahmed小朋友写的 nft-image-generator

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/11/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 批量生成独一无二的NFT猫猫图,这项目王多鱼会投吗?
  • 前言
  • 一、设置合成部件的权重
  • 二、每一张图片对应的文件名
  • 三、随即生成基于权重的图片组合
  • 四、判断所有的图片是否独特
  • 五、为每一张图片添加Token Id
  • 六、获取图片使用的数量
  • 七、拼凑图片
  • 八、来欣赏一下我生成的独一无二的图片吧~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档