Need help with Rails paperclip gem

Currently I am working on a ROR code which uses rails paperclip gem.

My requirement is, to process images as per its file extension.

Case 1: If image type is “svg”, then do not process original image(as ImageMagick breaks on resizing svg images). Upload original image, along with large, medium, grayscale, grayscale_small versions. However all files will be similar to original file, with different file names. Now I am able to upload only original.svg file. However other versions are not created correctly, and I did not find any solution so far.

Case 2: If it is not a “svg” image, then process image as per given style. This is working as expected.

Current code looks like:

has_mongoid_attached_file( :image, {
:styles => lambda { |img_url| img_url.instance.image_content_type != "image/svg+xml" ? {
      :large => "x248",
      :medium => "x64",
      :grayscale => { :processors => [:grayscale], :size => "82x82" },
      :grayscale_small => { :processors => [:grayscale], :size => "48x48" }
      } :
{
 :large => {write-a-code-to-upload-file-same-as-original-file-with-name-large},
:medium => {write-a-code-to-upload-file-same-as-original-file-with-name-medium}
:grayscale => {write-a-code-to-upload-file-same-as-original-file-with-name-grayscale}
:grayscale_small => {write-a-code-to-upload-file-same-as-original-file-with-name-grayscal_small}
}
}
}

mongoid: 3.0.15

paperclip: 2.3.11

mongoid-paperclip: 0.0.8

Gem versions:

Please let me know if you have worked on similar requirement. Any pointers will be highly appreciated.

Are you sure there is still a problem resizing svg? I thought that was
fixed some time ago, though I have not done it myself.

Colin

Hi Colin,

Yes, there is still a problem with ruby gem versions I am using. Using above resize :styles code, produced SVG images are invalid xml, and do not open in browser. So I want to upload as it is.

Thanks.

Hi Colin,

Yes, there is still a problem with ruby gem versions I am using. Using above
resize :styles code, produced SVG images are invalid xml, and do not open in
browser. So I want to upload as it is.

Which version are you using?

Colin

$ bundle exec rails -v

Rails 3.1.3

$ ruby -v

ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin14.4.0]


**mongoid:** 3.0.15

**paperclip:** 2.3.11

**mongoid-paperclip:** 0.0.8

Gem versions:

$ identify

Version: ImageMagick 6.9.1-10 Q16 x86_64 2016-02-29 http://www.imagemagick.org

Currently I am working on a ROR code which uses rails paperclip gem.

My requirement is, to process images as per its file extension.

Here's how I solved this for a document management system that needed transcoding for video, resizing for images, and nothing for every other file type (zip, powerpoint, etc.).

  has_attached_file :blob,
  :preserve_files => true,
  :styles => Proc.new { |a| a.instance.file_styles(a.instance) },
  :processors => Proc.new { |a| a.processors(a) }

  def file_styles(a)
    if a.video?
      return {
        :thumb => { :geometry => "320x320>", :format => 'jpg', :time => 1 },
        :poster => { :geometry => "1280x720>", :format => 'jpg', :time => 1 },
        :mp4 => { :geometry => "1280x720>", :format => :mp4, :streaming => true }
      }
    end
    if a.photo?
      return { :thumb => ["320x320>", :png], :large => ["1500x1500>", :png] }
    end
    if a.audio?
      return { :wav => ['audio', :wav], :mp3 => ['audio', :mp3] }
    end
    {} # if you get here, then there are no styles needed, just the original
  end

  def processors(a)
    if a.video?
      return [:ffmpeg, :qtfaststart]
    end
    if a.photo?
      return [ :my_thumbnail ]
    end
    if a.audio?
      return [ :audio ]
    end
    [] # if you get here, then no processing needed
  end

Hope this helps,

Walter

Currently I am working on a ROR code which uses rails paperclip gem.

My requirement is, to process images as per its file extension.

Here's how I solved this for a document management system that needed transcoding for video, resizing for images, and nothing for every other file type (zip, powerpoint, etc.).

  def audio?
    ['audio/mpeg', 'audio/x-wav', 'audio/x-aiff', 'audio/ogg'].include?(blob_content_type.to_s.downcase)

In case you wondered...

Walter

$ bundle exec rails -v

Rails 3.1.3

Did you realise that was superseded in Feb 2012 and there have been
critical security fixes since then? That version is not suitable for
use. If this is a new app then start again with Rails version 4, if
an existing one then at least upgrade to the latest 3.1 immediately,
and then migrate to 4 when you can.

$ ruby -v

ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin14.4.0]

Gem versions:

mongoid: 3.0.15
paperclip: 2.3.11

That is an even earlier version dating from early 2011. Stop wasting
time trying to make it work and upgrade to latest rails and gems.