Sha256: 444b15d67d3b9a7617a9294b733ba75fc2c09da370b78cb28c696f1809c194eb

Contents?: true

Size: 1.44 KB

Versions: 39

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

module ActiveStorage
  # This analyzer relies on the third-party {ruby-vips}[https://github.com/libvips/ruby-vips] gem. Ruby-vips requires
  # the {libvips}[https://libvips.github.io/libvips/] system library.
  class Analyzer::ImageAnalyzer::Vips < Analyzer::ImageAnalyzer
    def self.accept?(blob)
      super && ActiveStorage.variant_processor == :vips
    end

    private
      def read_image
        begin
          require "ruby-vips"
        rescue LoadError
          logger.info "Skipping image analysis because the ruby-vips gem isn't installed"
          return {}
        end

        download_blob_to_tempfile do |file|
          image = instrument("vips") do
            ::Vips::Image.new_from_file(file.path, access: :sequential)
          end

          if valid_image?(image)
            yield image
          else
            logger.info "Skipping image analysis because Vips doesn't support the file"
            {}
          end
        rescue ::Vips::Error => error
          logger.error "Skipping image analysis due to an Vips error: #{error.message}"
          {}
        end
      end

      ROTATIONS = /Right-top|Left-bottom|Top-right|Bottom-left/
      def rotated_image?(image)
        ROTATIONS === image.get("exif-ifd0-Orientation")
      rescue ::Vips::Error
        false
      end

      def valid_image?(image)
        image.avg
        true
      rescue ::Vips::Error
        false
      end
  end
end

Version data entries

39 entries across 38 versions & 6 rubygems

Version Path
trusty-cms-7.0.9.1 vendor/bundle/ruby/3.3.0/gems/activestorage-7.0.8.7/lib/active_storage/analyzer/image_analyzer/vips.rb
minato_ruby_api_client-0.2.2 vendor/bundle/ruby/3.2.0/gems/activestorage-7.1.3.4/lib/active_storage/analyzer/image_analyzer/vips.rb
activestorage-7.1.5.1 lib/active_storage/analyzer/image_analyzer/vips.rb
activestorage-7.0.8.7 lib/active_storage/analyzer/image_analyzer/vips.rb
activestorage-7.1.5 lib/active_storage/analyzer/image_analyzer/vips.rb
activestorage-7.1.4.2 lib/active_storage/analyzer/image_analyzer/vips.rb
activestorage-7.0.8.6 lib/active_storage/analyzer/image_analyzer/vips.rb
activestorage-7.1.4.1 lib/active_storage/analyzer/image_analyzer/vips.rb
activestorage-7.0.8.5 lib/active_storage/analyzer/image_analyzer/vips.rb
activestorage-7.1.4 lib/active_storage/analyzer/image_analyzer/vips.rb
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/activestorage-7.0.8.4/lib/active_storage/analyzer/image_analyzer/vips.rb
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/activestorage-7.1.3.4/lib/active_storage/analyzer/image_analyzer/vips.rb
cm-admin-1.5.22 vendor/bundle/ruby/3.3.0/gems/activestorage-7.0.5.1/lib/active_storage/analyzer/image_analyzer/vips.rb
cm-admin-1.5.21 vendor/bundle/ruby/3.3.0/gems/activestorage-7.0.5.1/lib/active_storage/analyzer/image_analyzer/vips.rb
cm-admin-1.5.20 vendor/bundle/ruby/3.3.0/gems/activestorage-7.0.5.1/lib/active_storage/analyzer/image_analyzer/vips.rb
tinymce-rails-7.1.2 vendor/bundle/ruby/3.3.0/gems/activestorage-7.1.3.4/lib/active_storage/analyzer/image_analyzer/vips.rb
activestorage-7.1.3.4 lib/active_storage/analyzer/image_analyzer/vips.rb
activestorage-7.0.8.4 lib/active_storage/analyzer/image_analyzer/vips.rb
activestorage-7.1.3.2 lib/active_storage/analyzer/image_analyzer/vips.rb
activestorage-7.1.3.1 lib/active_storage/analyzer/image_analyzer/vips.rb