디지털 글쓰기

생성AI: 책표지 + 로고

생성AI로 책표지 이미지를 제작하고 책제목, 저자 등 정보를 결합시켜 챗GPT 시대 출판의 새장을 열어보자. 로고 제작은 덤이다.

저자
소속

1 책표지 이미지

책 표지는 독자가 처음으로 보는 것이므로 책에 대한 첫 인상을 형성하는 데 결정적인 역할을 한다. 트깋, 표지는 책의 주제, 톤, 장르 등을 암시하고, 독자가 책에 대해 어떤 기대를 가질지 결정한다는 점에서 매우 중요하다. 그 외에도 독특하고 매력적인 표지는 독자의 시선을 끌고 그들이 책을 집어보거나 클릭을 유도하거나, 출판사와 저자가 전문적이고, 책에 투자하고, 독자에게 가치를 제공하려고 노력한다는 메시지를 전달함은 물론, 책의 주제를 간략히 요약하는 역할도 수행한다.

1.1 AI 이미지

chatGPT: Text-to-Images 참조

1.2 고화질 이미지

책 표지가 저해상도로 조약한 느낌이 주는 것을 피하기 위해 upscale AI 기능을 활용하여 캔바(Canva)와 같은 디자인도구에 사용하기 위해서 고해상도 이미지로 바꿔주는 것이 필요하다. 다양한 도구가 존재하지만, 온라인에서 간단히 사용할 수 있는 nightmareai/real-esrgan 서비스를 사용하면 AI가 생성한 저해상도 이미지를 고해상도 이미지로 다시 탈바꿈시킬 수 있다.

2 bitPublish

한국 R 사용자회에서 재현가능한 디지털 출판을 위한 데이터 사이언스 출판 R 패키지를 제작했다. bitPublish은 4x6 배판 도서를 목표로 삼아 설정되었다. 물론, 다른 판형이 필요하면 자유로이 저작권을 준용하면서 바꿔 디지털 데이터 사이언스 저작을 이어가면 된다.

2.1 KDP

아마존 Kindle Direct Publishing 웹사이트에서 표지 인쇄 계산기 및 템플릿을 다운로드 받아 책표지 디자인도 수월히 진행할 수 있다. bitPublish에서 지정한 4x6 배판 도서출판을 기준으로 책표지 제작을 위한 템플릿을 다운로드 한다.

2.2 페인트넷

Kindle Direct Publishing에서 다운로드 받은 템플릿 이미지에서 배경이미지를 제거하고 책표지 디자인을 할 경우 paint.net 무료 소프트웨어를 설치해서 손쉽게 작업을 이어나갈 수 있다.

2.3 캔바

캔바(Canva) 사용자 친화적인 그래픽 디자인 플랫폼으로, 웹 기반 서비스를 사용하면 전문적인 디자인 경험이 없는 사람들도 손쉽게 다양한 시각적 콘텐츠를 생성할 수 있다는 점에서 인기를 끌고 있다. 기본적으로 무료 서비스이며 고급 기능을 사용하는 경우 유료서비스 가입을 통해 이용이 가능하다.

캔바에서 Kindle Direct Publishing 책표지 템플릿과 생성AI를 통해 제작한 이미지를 결합시키고 책 제목, 저자, 관련 작업을 수행한 후에 PDF로 뽑아내 마무리한다.

3 책로고 제작

R 커뮤니티에서는 오래전부터 개발 패키지에 스티커를 만들고 이를 공유하는 전통이 있다. “챗GPT 유닉스 쉘 - 데이터 사이언스 자동화” 책을 집필하면서 결국 GitHub 저장소에 코드가 저장되다 보니 자연히 R 패키지와 유사한 형태가 되었고 결국 스티커 제작으로 이어졌다.

R 스티커 제작도 생성형 AI의 최근 추세를 피해가지 못했다. 1

기본 작업흐름은 openai API를 사용해서 “프롬프트”를 잘 만들어서 원하는 AI 생성 이미지를 얻고 cropcircles 패키지를 사용해서 후처리를 통해 스티커를 제작한다.

코드
################################################################################
##
## 챗GPT 유닉스 쉘 스티커 제작
## 이광춘, 2023-06-26
## 출처: https://gradientdescending.com/how-to-generate-a-hex-sticker-with-openai-and-cropcircles/
##
################################################################################
library(tidyverse)
library(openai)
library(cropcircles)
library(magick)
library(showtext)
library(ggpath)
library(ggtext)
library(glue)

extrafont::loadfonts()

Sys.setenv(OPENAI_API_KEY = Sys.getenv("OPENAI_API_KEY"))

# x <- create_image("a beautiful sunset as the sun falls behind tall snow capped mountains and a pine forest")
x <- create_image("a amazing sunrise as the sun is rising behind tall snow capped mountains and a pine forest")

## 원본이미지 다운로드
download.file(url = x$data$url, destfile = "images/hex_chatGPT_unix_shell_image.png",
              mode = "wb")

font_add_google('inconsolata', 'Inconsolata')
font_add_google('dokdo', 'Dokdo')
# 글꼴 다운로드 : https://fontawesome.com/download
font_add('fa-brands', 'data/fonts/Font Awesome 6 Brands-Regular-400.otf')
showtext_auto()
ft <- "dokdo"
ft_github <- "inconsolata"
txt <- "white"

pkg_name <- "챗GPT 유닉스 쉘"

img_cropped <- hex_crop(
  images = x$data$url,
  border_colour = "black",
  border_size = 24
)

ggplot() +
  geom_from_path(aes(0.5, 0.5, path = img_cropped)) +
  annotate("text", x = 0.45, y = 0.08, label = pkg_name,
           family = ft, size = 42, colour = txt,
           angle = 30, hjust = 0, fontface = "bold") +
  # add github
  annotate("richtext", x=0.55, y = 0.05, family = ft_github, size = 20, angle = 30,
           colour = txt, hjust = 0,
           label = glue("<span style='font-family:fa-brands; color:{txt}'>&#xf09b;&nbsp;</span> bit2r/gpt-shell"),
           label.color = NA, fill = NA)   +
  xlim(0, 1) +
  ylim(0, 1) +
  theme_void() +
  coord_fixed()

ggsave("images/hex_chatGPT_unix_shell_02.png", height = 6, width = 6)

프롬프트를 통해 얻은 이미지를 후처리하여 얻은 결과물은 다음과 같다.