Sha256: a17c4e8c68c19752838631bf7248b1f23453360eda89ae0a75cd4270c0f5eaf8

Contents?: true

Size: 1.46 KB

Versions: 30

Compression:

Stored size: 1.46 KB

Contents

require "rabbit/utils"
require "rabbit/image/base"

module Rabbit
  module ImageManipulable
    class GIMP < Base

      unshift_loader(self)

      GIMP_COMMANDS = %w(gimp)
      HEADER = "gimp xcf file"
      HEADER_SIZE = HEADER.size

      include SystemRunner

      class << self
        def match?(filename)
          File.open(filename) do |f|
            HEADER == f.read(HEADER_SIZE)
          end
        end
      end

      private
      def update_size
        png_file = Tempfile.new("rabbit-loader-gimp-png")
        png_path = png_file.path
        clip_to_image = 1
        merge_type = clip_to_image
        command = <<-EOC
(let ((image (car (gimp-file-load RUN-NONINTERACTIVE
                                  "#{@filename}" "#{@filename}"))))
  (let ((layer (car (gimp-image-merge-visible-layers image #{merge_type}))))
    (file-png-save-defaults RUN-NONINTERACTIVE image layer
                            "#{png_path}" "#{png_path}"))
  (gimp-image-delete image))
EOC
        args = %w(-i)
        args.concat(["-b", command])
        args.concat(["-b", "(gimp-quit TRUE)"])
        if GIMP_COMMANDS.any? {|gimp| run(gimp, *args); File.exist?(png_path)}
          png_file.open
          png_file.binmode
          loader = load_by_pixbuf_loader(png_file.read)
          @pixbuf = loader.pixbuf
        else
          raise GIMPCanNotHandleError.new("gimp #{args.join(' ')}",
                                          GIMP_COMMANDS)
        end
      end
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
rabbit-2.1.2 lib/rabbit/image/gimp.rb
rabbit-2.1.1 lib/rabbit/image/gimp.rb
rabbit-2.1.0 lib/rabbit/image/gimp.rb
rabbit-2.0.9 lib/rabbit/image/gimp.rb
rabbit-2.0.8 lib/rabbit/image/gimp.rb
rabbit-2.0.7 lib/rabbit/image/gimp.rb
rabbit-2.0.6 lib/rabbit/image/gimp.rb
rabbit-2.0.5 lib/rabbit/image/gimp.rb
rabbit-2.0.4 lib/rabbit/image/gimp.rb
rabbit-2.0.3 lib/rabbit/image/gimp.rb
rabbit-2.0.2 lib/rabbit/image/gimp.rb
rabbit-2.0.1 lib/rabbit/image/gimp.rb
rabbit-2.0.0 lib/rabbit/image/gimp.rb
rabbit-1.0.9 lib/rabbit/image/gimp.rb
rabbit-1.0.8 lib/rabbit/image/gimp.rb
rabbit-1.0.7 lib/rabbit/image/gimp.rb
rabbit-1.0.6 lib/rabbit/image/gimp.rb
rabbit-1.0.5 lib/rabbit/image/gimp.rb
rabbit-1.0.4 lib/rabbit/image/gimp.rb
rabbit-1.0.3 lib/rabbit/image/gimp.rb