> On Mar 15, 2016, at 4:28 AM, Nilesh <navale.nil...@gmail.com> wrote:
> 
> 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



> 
> 
> 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}
>  
> 
> }
> }
> }
> 
> Gem versions:
> 
> mongoid: 3.0.15
> paperclip: 2.3.11
> mongoid-paperclip: 0.0.8
> 
> Please let me know if you have worked on similar requirement. Any pointers 
> will be highly appreciated.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to rubyonrails-talk+unsubscr...@googlegroups.com.
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/rubyonrails-talk/97af62aa-072f-4e0a-a984-992bf3a35fc6%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/961E5979-0B53-40F3-B6ED-3DE833380D6A%40wdstudio.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to