Sha256: d85e0310d20a723acbc39e7be78502eff373efe702d76ec829f9c4eaee7467bd

Contents?: true

Size: 1.94 KB

Versions: 5

Compression:

Stored size: 1.94 KB

Contents

require 'fileutils'
require 'image_science'
require 'xmp'
require 'exifr/jpeg'
require_relative 'model'

module ImageSite
  class Image < Model
    def self.all(options)
      images = options.files.map.with_index(1) do |file, i|
        Image.new i, file, options
      end
      images.each.with_index do |image, i|
        if i > 0
          image.previous = images[i - 1]
        end
        if i < images.length - 1
          image.next = images[i + 1]
        end
      end
    end

    def self.template_name
      'Page.html.erb'
    end
    private_class_method :template_name

    attr_accessor :next, :previous, :index

    def initialize(number, file, options)
      super number, options
      @file = file
    end

    def write
      write_scaled_image relative_image, 912
      write_html image: self
    end

    def relative_image
      "Images/#{@number}.jpeg"
    end

    def title
      title = dc(:title)
      title && title.first || nil
    end

    NEWLINE = "\xE2\x80\xA8".force_encoding('ASCII-8BIT')

    def description
      exif && exif.image_description && exif.image_description.gsub(NEWLINE, "<br/>\n").force_encoding('utf-8')
    end

    def tags
      dc(:subject) || []
    end

    def relative_html
      "Pages/#{@number}.html"
    end

    def write_thumbnail
      write_scaled_image relative_thumbnail, 240
    end

    def relative_thumbnail
      "Thumbnails/#{@number}.jpeg"
    end

    private

    def write_scaled_image(unqualified_name, size)
      make_subdir File.dirname(unqualified_name)
      ImageScience.with_image @file do |image|
        image.thumbnail size do |thumbnail|
          thumbnail.save "#{@options.output_dir}/#{unqualified_name}"
        end
      end
    end

    def dc(property)
      xmp && xmp.respond_to?(:dc) && xmp.dc && xmp.dc.respond_to?(property) && xmp.dc.send(property)
    end

    def xmp
      @xmp ||= XMP.parse exif
    end

    def exif
      @exif ||= EXIFR::JPEG.new @file
    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
imagesite-1.0.10 lib/image_site/image.rb
imagesite-1.0.9 lib/image_site/image.rb
imagesite-1.0.8 lib/image_site/image.rb
imagesite-1.0.7 lib/image_site/image.rb
imagesite-1.0.6 lib/image_site/image.rb