module AttachmentSaver::Processors::ImageScience
Public Instance Methods
examine_image()
click to toggle source
# File lib/processors/image_science.rb, line 21 def examine_image with_image_attributes(uploaded_file_path) do |original_image| self.width = original_image.width if respond_to?(:width) self.height = original_image.height if respond_to?(:height) self.content_type = original_image.mime_type unless self.class.attachment_options[:keep_content_type] || original_image.mime_type.nil? self.file_extension = original_image.file_type_extension unless self.class.attachment_options[:keep_file_extension] || original_image.file_type_extension.nil? end rescue AttachmentSaverError raise rescue Exception => ex raise ImageScienceProcessorError, "#{ex.class}: #{ex.message}", ex.backtrace end
process_image(original_image, derived_format_name, resize_format)
click to toggle source
# File lib/processors/image_science.rb, line 34 def process_image(original_image, derived_format_name, resize_format) resize_format = Image.from_geometry_string(resize_format) if resize_format.is_a?(String) original_image.send(*resize_format) do |derived_image| return nil unless want_format?(derived_format_name, derived_image.width, derived_image.height) if derived_image.file_type == 'GIF' # && derived_image.depth != 8 # TODO: submit patch to add depth attribute # as a special case hack, don't try and save 24-bit derived images into 8-bit-only GIF format # (ImageScience doesn't resample back down, so it throws errors if we try to do that) derived_content_type = 'image/png' derived_extension = 'png' else # both original_filename and content_type must be defined for parents when using image processing # - but apps can just define them using attr_accessor if they don't want them persisted to db derived_content_type = derived_image.mime_type || original_image.mime_type || content_type # note that mime_type will return nil instead of returning any of the freeimage-invented content types derived_extension = (derived_image.file_type || file_extension).downcase # in fact, derived_image.file_type should always work; the only situation in which it could return nil is if freeimage is extended to support a new image format but image_science_extensions isn't updated end # we leverage tempfiles as discussed in the uploaded_file method temp = Tempfile.new(["asitemp", ".#{derived_extension}"], tempfile_directory) temp.binmode temp.close derived_image.save(temp.path) temp.open # we close & reopen so we see the file the processor wrote to, even if it created a new file rather than writing into our tempfile { :format_name => derived_format_name.to_s, :width => derived_image.width, :height => derived_image.height, :content_type => derived_content_type, :file_extension => derived_extension, :uploaded_data => temp } end end
with_image(filename, &block)
click to toggle source
# File lib/processors/image_science.rb, line 12 def with_image(filename, &block) ::ImageScience.with_image(filename) {|image| block.call(image.extend(Operations))} end
with_image_attributes(filename, &block)
click to toggle source
# File lib/processors/image_science.rb, line 16 def with_image_attributes(filename, &block) return with_image(filename, &block) unless ::ImageScience.respond_to?(:with_image_attributes) ::ImageScience.with_image_attributes(filename) {|image| block.call(image)} end