NFT를 위한 랜덤파츠 이미지 구현
예전에 루비로 프로젝트하여 개발한적이 있다. 그때 정말 신세계 같은 언어 였다. … 이후 파이썬이 나왔다. 근데 파이선은 그냥 루비와 똑같았다. ruby는 python 이고 , gem은 pip 였다.
…
오래만에 만난 디자이너 켄지 가 NFT 이야기를 꺼냈고, 이런저런 이야기를 나누었다.
크립토펑크(Cryto Punks)를 처음 봤고, 그 다음 유사한 형태의 NFT를 위한 이미지를 봤다. 개발(방법)이 궁금했다.
…
랜덤파츠로 처리하여 이미지를 생성 한다.(사실 처음에는 한개의 원본 이미지를 참조해서 AI가 다른 수만개의 이미지를 만든다고 생각했다.)
종이인형 놀이 같은 거라 생각 하면 된다. - 종이인형에 모자도 입히고, 옷도 입히고, 신발도 입히고 …
그 다음날 구현 하였다. 파이썬으로…
구현
- 조합된 이미지는 같은 이미지가 하나도 없어야 합니다.
- 희귀성을 부여 하고 싶은 부분은 랜덤시 낮은 확률을 적용해야 합니다.
- 이미지 레이어를 고려 해야 합니다.
- 만들수 있는 총 조합수를 생각해야 합니다.
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 세상이 될테니…