NFT를 위한 랜덤파츠 이미지 구현

2022-01-28

예전에 루비로 프로젝트하여 개발한적이 있다. 그때 정말 신세계 같은 언어 였다. … 이후 파이썬이 나왔다. 근데 파이선은 그냥 루비와 똑같았다. ruby는 python 이고 , gem은 pip 였다.

오래만에 만난 디자이너 켄지 가 NFT 이야기를 꺼냈고, 이런저런 이야기를 나누었다.

크립토펑크(Cryto Punks)를 처음 봤고, 그 다음 유사한 형태의 NFT를 위한 이미지를 봤다. 개발(방법)이 궁금했다.

랜덤파츠로 처리하여 이미지를 생성 한다.(사실 처음에는 한개의 원본 이미지를 참조해서 AI가 다른 수만개의 이미지를 만든다고 생각했다.)

종이인형 놀이 같은 거라 생각 하면 된다. - 종이인형에 모자도 입히고, 옷도 입히고, 신발도 입히고 …

그 다음날 구현 하였다. 파이썬으로…

NFT_IMAGES

구현

  • 조합된 이미지는 같은 이미지가 하나도 없어야 합니다.
  • 희귀성을 부여 하고 싶은 부분은 랜덤시 낮은 확률을 적용해야 합니다.
  • 이미지 레이어를 고려 해야 합니다.
  • 만들수 있는 총 조합수를 생각해야 합니다.

Resource 만들기

해당 랜덤으로 붙고자 하는 부분을 각각 여러개 만듭니다. (얼굴 2개), X (머리 7개) X (눈 4개) … 각 부위별로 만듭니다.

총 나올 경우의 수는 각 부위 갯수의 곱 된다.

API 활용

from PIL import Image
...

face_img = Image.open(f'./face/1.png').convert('RGBA')
eye_img = Image.open(f'./eyes/3.png').convert('RGBA')
...

#Merge each Image
mrg1 = Image.alpha_composite(face_img, eye_img)
mrg2 = Image.alpha_composite(mrg1, some_img)
...

#Convert RGB
cnv_img = mrg5.convert('RGB')
file_name = str(tokenId) + ".png"
cnv_img.save("./cryto_fufu/" + file_name)
...

I think…

항상 그러 했다. 생각만 할때와 행동으로 옮겼을 때…

블록체인 블록체인 … 토큰 토큰… 솔리디티 타고 이더리움 공간으로 가볼까 한다.

ICO 프로젝트의 기회가 올지도 모르니… web 3.0 세상이 될테니…