class VirtualNameCard::Generator

Constants

GENERATED_FILE_PATH

Public Class Methods

build(name_kanji:, name_romaji:, role: nil, email: nil, twitter_account: nil, url: nil) click to toggle source

@param [String] name_kanji @param [String] name_romaji @param [String, nil] role @param [String, nil] email @param [String, nil] twitter_account @param [String, nil] url @return [VirtualNameCard::Image]

# File lib/virtual_name_card/generator.rb, line 17
def build(name_kanji:, name_romaji:, role: nil, email: nil, twitter_account: nil, url: nil)
  base_image_path =
    if twitter_account
      File.expand_path("../../base_images/with_twitter.jpg", __dir__)
    else
      File.expand_path("../../base_images/without_twitter.jpg", __dir__)
    end

  image = MiniMagick::Image.open(base_image_path)

  name_kanji_combine(image: image, text: name_kanji)
  name_romaji_combine(image: image, text: name_romaji)

  if role
    role_combine(image: image, text: role)
  end

  if email
    email_combine(image: image, text: email)
  end

  if twitter_account
    twitter_account_combine(image: image, text: twitter_account)
  end

  if url
    image = url_combine(image: image, url: url)
  end

  VirtualNameCard::Image.new(mini_magick_image: image)
end
generate(name_kanji:, name_romaji:, role: nil, email: nil, twitter_account: nil, url: nil) click to toggle source

@param [String] name_kanji @param [String] name_romaji @param [String, nil] role @param [String, nil] email @param [String, nil] twitter_account @param [String, nil] url

# File lib/virtual_name_card/generator.rb, line 55
def generate(name_kanji:, name_romaji:, role: nil, email: nil, twitter_account: nil, url: nil)
  image = build(
    name_kanji: name_kanji,
    name_romaji: name_romaji,
    role: role,
    email: email,
    twitter_account: twitter_account,
    url: url,
  )
  image.mini_magick_image.write GENERATED_FILE_PATH
end

Private Class Methods

email_combine(image:, text:) click to toggle source
# File lib/virtual_name_card/generator.rb, line 97
        def email_combine(image:, text:)
  image.combine_options do |config|
    config.font File.expand_path("../../fonts/Noto_Sans_JP/NotoSansJP-Regular.otf", __dir__)
    config.gravity "west"
    config.pointsize 45
    config.draw "text 170,217 '#{text}'"
    config.fill "#000000"
  end
end
name_kanji_combine(image:, text:) click to toggle source
# File lib/virtual_name_card/generator.rb, line 67
        def name_kanji_combine(image:, text:)
  image.combine_options do |config|
    config.font File.expand_path("../../fonts/Noto_Sans_JP/NotoSansJP-Medium.otf", __dir__)
    config.gravity "west"
    config.pointsize 100
    config.draw "text 170,-90 '#{text}'"
    config.fill "#000000"
  end
end
name_romaji_combine(image:, text:) click to toggle source
# File lib/virtual_name_card/generator.rb, line 77
        def name_romaji_combine(image:, text:)
  image.combine_options do |config|
    config.font File.expand_path("../../fonts/Noto_Sans_JP/NotoSansJP-Regular.otf", __dir__)
    config.gravity "west"
    config.pointsize 50
    config.draw "text 170,22 '#{text}'"
    config.fill "#000000"
  end
end
role_combine(image:, text:) click to toggle source
# File lib/virtual_name_card/generator.rb, line 87
        def role_combine(image:, text:)
  image.combine_options do |config|
    config.font File.expand_path("../../fonts/Noto_Sans_JP/NotoSansJP-Regular.otf", __dir__)
    config.gravity "west"
    config.pointsize 45
    config.draw "text 170,105 '#{text}'"
    config.fill "#000000"
  end
end
twitter_account_combine(image:, text:) click to toggle source
# File lib/virtual_name_card/generator.rb, line 107
        def twitter_account_combine(image:, text:)
  image.combine_options do |config|
    config.font File.expand_path("../../fonts/Noto_Sans_JP/NotoSansJP-Medium.otf", __dir__)
    config.gravity "west"
    config.pointsize 45
    config.draw "text 175,433 '#{text}'"
    config.fill "#593535"
  end
end
url_combine(image:, url:) click to toggle source
# File lib/virtual_name_card/generator.rb, line 117
        def url_combine(image:, url:)
  qr_image = RQRCode::QRCode.new(url).as_png(
    bit_depth: 1,
    border_modules: 4,
    color_mode: ChunkyPNG::COLOR_GRAYSCALE,
    color: 'black',
    file: nil,
    fill: 'white',
    module_px_size: 6,
    resize_exactly_to: false,
    resize_gte_to: false,
    size: 240,
  ).yield_self do |png|
    MiniMagick::Image.read(png.to_s)
  end

  image.composite(qr_image) do |config|
    config.compose "Over"
    config.gravity "east"
    config.geometry "+110+345"
  end
end