class AppCommand::GenerateUIImageLanding

Constants

ACCEPTED_IMG_FORMATS

Public Instance Methods

execute() click to toggle source
# File lib/routes/generate/generate_img_landing.rb, line 7
def execute

    begin

        @opts = command_options
        @args = arguments

        opts_validate
        opts_routing

    rescue => e

        Blufin::Terminal::print_exception(e)

    end

end
image_name(suffix) click to toggle source

Standardized way of generating image-name. @return string

# File lib/routes/generate/generate_img_landing.rb, line 88
def image_name(suffix)
    "#{@image_prefix}-#{suffix}.#{@image_ext}"
end
opts_routing() click to toggle source

Generates a Landing Page Image. See: www.rubyguides.com/2018/12/minimagick-gem/ @return void

# File lib/routes/generate/generate_img_landing.rb, line 60
def opts_routing

    # TODO REMOVE - $ my g b bl && my g b && bf g ui l ~/Repos/blufin-archetypes/nuxt/v1/static/img/bg/face.jpg testing -ys

    target_images = [
        {:side => 'width', :length => 2560, :ratio => '16:9', :quality => @quality},
        {:side => 'width', :length => 1920, :ratio => '16:9', :quality => @quality},
        {:side => 'width', :length => 1366, :ratio => '16:9', :quality => @quality},
        {:side => 'width', :length => 414, :ratio => '9:18', :quality => @quality},
    ]
    target_output = ["Destination path: #{Blufin::Terminal::format_directory(@path_target)}", nil]
    target_images.each { |ti| target_output << "\x1B[38;5;154m#{Blufin::Image::calc_file_name(@image_prefix, @image_ext, ti[:side], ti[:length], ti[:ratio])}\x1B[0m \xe2\x86\x92 #{ti.inspect}" }
    if @opts[:skip_confirm] || Blufin::Terminal::prompt_yes_no("About to #{Blufin::Terminal::format_action('create')} the following images from #{Blufin::Terminal::format_directory(@file_source)}:", target_output)
        # This runs the crop(s).
        target_images.each { |ti|
            target = "#{@path_target}/#{Blufin::Image::calc_file_name(@image_prefix, @image_ext, ti[:side], ti[:length], ti[:ratio])}"
            Blufin::Image::crop_to_length_and_ratio(@file_source, target, ti[:side], ti[:length], ti[:ratio], ti[:quality])
            if @opts[:add_size]
                img = Blufin::Image::info(target)
                Blufin::Image::add_text(target, target, "#{img.width}x#{img.height}")
            end
        }
    end

end
opts_validate() click to toggle source
# File lib/routes/generate/generate_img_landing.rb, line 25
def opts_validate
    if @args.nil? || @args.length < 2
        Blufin::Terminal::arg_instructions(
            [
                'Path to source image.',
                "Prefix for new image name(s) \xe2\x80\x94 IE: #{Blufin::Terminal::format_highlight('logo')}\x1B[38;5;208m will produce \xe2\x86\x92 #{Blufin::Terminal::format_highlight('logo-375x250.jpg')}"
            ])
        exit
    end
    @file_source = File.expand_path(@args[0])
    Blufin::Terminal::error("#{Blufin::Terminal::format_directory(@file_source)} file doesn't exist.") unless Blufin::Files::file_exists(@file_source)
    fss = @file_source.split('/')
    fss.pop
    @path_target  = fss.join('/')
    @image_prefix = @args[1]
    @quality      = @opts[:quality]
    Blufin::Terminal::error("#{Blufin::Terminal::format_directory(@path_target)} path doesn't exist.") unless Blufin::Files::path_exists(@path_target)
    Blufin::Terminal::error("#{Blufin::Terminal::format_highlight('Image prefix')} cannot be blank or nil.") if @image_prefix.nil? || @image_prefix.to_s.strip == ''
    Blufin::Terminal::error("#{Blufin::Terminal::format_highlight('Quality')} must be integer between 0 - 100, instead got: #{@quality}") unless @quality.to_s =~ /^\d+$/ && @quality.to_i >= 0 && @quality.to_i <= 100
    @image_ext = File.extname(@file_source).gsub(/^\./, '').strip.downcase
    Blufin::Terminal::error("Unsupported file-extension #{Blufin::Terminal::format_highlight(@image_ext)}. Supported extensions are:", ACCEPTED_IMG_FORMATS, true) unless ACCEPTED_IMG_FORMATS.include?(@image_ext)
    @image = Blufin::Image::info(@file_source)
    Blufin::Terminal::custom('SCANNED', 4, "Source Image: #{Blufin::Terminal::format_directory(@file_source)}", [
        "Type:       \x1B[38;5;94m#{@image.type}\x1B[0m",
        "Size:       \x1B[38;5;94m#{@image.size}\x1B[0m",
        "Dimensions: \x1B[38;5;94m#{@image.width}x#{@image.height}\x1B[0m",
        "GCD:        \x1B[38;5;94m#{Blufin::Image::gcd(@image.width, @image.height)}\x1B[0m",
        "Aspect:     \x1B[38;5;94m#{Blufin::Image::calc_aspect_ratio(@image.width, @image.height)}\x1B[0m"
    ])

end