module ImageQualityCheck

Constants

VERSION

Public Class Methods

analyze(path_to_image) click to toggle source
# File lib/image_quality_check.rb, line 15
def self.analyze(path_to_image)
  out = `convert #{Shellwords.escape path_to_image} json:`
  # image magick gif delay bug invalid json
  # https://github.com/ImageMagick/ImageMagick/issues/1624
  out.gsub!(/("delay": "[^"]+")\n/m, "\\1,\n")
  return {} if out.empty?

  raw_json = JSON.parse(out)
  json = raw_json.is_a?(Array) ? raw_json.first['image'] : raw_json['image']
  background_is_transparent =
    json.dig('channelDepth', 'alpha') &&
    json['channelStatistics']['alpha']['min'] != json['channelStatistics']['alpha']['max']
  {
    format: json['format'].downcase,
    mime_type: json['mimeType'],
    background_is_transparent: background_is_transparent,
    width: json.dig('geometry', 'width').to_i,
    height: json.dig('geometry', 'height').to_i,
    quality: json['quality'],
    blur: blur_detect(path_to_image).map { |k, v| [ k.to_sym, v ] }.to_h
  }
end
blur_detect(path_to_image) click to toggle source
# File lib/image_quality_check.rb, line 38
def self.blur_detect(path_to_image)
  script = File.join(File.dirname(__FILE__), '..', 'exe', 'image_quality_blur')
  out, err, value = Open3.capture3("#{script} #{Shellwords.escape(path_to_image)}")
  if value.success?
    JSON.parse(out.gsub('NaN', '0'))
  else
    if out[/^\{/]
      JSON.parse(out)
    else
      {
        error: err.to_s,
        out: out.to_s
      }
    end
  end
end
determine_quality(model, attachment, &block) click to toggle source
# File lib/image_quality_check.rb, line 11
def self.determine_quality(model, attachment, &block)
  ImageQualityCheck::DetermineQuality.run(model, attachment, &block)
end