X-Git-Url: https://projects.mako.cc/source/selectricity-live/blobdiff_plain/6a935d078f20d2b1b0d60f0a30c41a642d40758a..5e74f498cd2f8d765e309ca52a45a7c2db0a1a6f:/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/rmagick_processor.rb diff --git a/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/rmagick_processor.rb b/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/rmagick_processor.rb new file mode 100644 index 0000000..7999edb --- /dev/null +++ b/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/rmagick_processor.rb @@ -0,0 +1,53 @@ +require 'RMagick' +module Technoweenie # :nodoc: + module AttachmentFu # :nodoc: + module Processors + module RmagickProcessor + def self.included(base) + base.send :extend, ClassMethods + base.alias_method_chain :process_attachment, :processing + end + + module ClassMethods + # Yields a block containing an RMagick Image for the given binary data. + def with_image(file, &block) + begin + binary_data = file.is_a?(Magick::Image) ? file : Magick::Image.read(file).first unless !Object.const_defined?(:Magick) + rescue + # Log the failure to load the image. This should match ::Magick::ImageMagickError + # but that would cause acts_as_attachment to require rmagick. + logger.debug("Exception working with image: #{$!}") + binary_data = nil + end + block.call binary_data if block && binary_data + ensure + !binary_data.nil? + end + end + + protected + def process_attachment_with_processing + return unless process_attachment_without_processing + with_image do |img| + resize_image_or_thumbnail! img + self.width = img.columns if respond_to?(:width) + self.height = img.rows if respond_to?(:height) + callback_with_args :after_resize, img + end if image? + end + + # Performs the actual resizing operation for a thumbnail + def resize_image(img, size) + size = size.first if size.is_a?(Array) && size.length == 1 && !size.first.is_a?(Fixnum) + if size.is_a?(Fixnum) || (size.is_a?(Array) && size.first.is_a?(Fixnum)) + size = [size, size] if size.is_a?(Fixnum) + img.thumbnail!(*size) + else + img.change_geometry(size.to_s) { |cols, rows, image| image.resize!(cols, rows) } + end + self.temp_path = write_to_temp_file(img.to_blob) + end + end + end + end +end \ No newline at end of file