2012-09-12 2 views
1

이미지가 버전 크기보다 큰 경우에만 carrierwave에서 버전을 생성 할 수 있습니다 (예 : 엄지).Carrierwave : 크기가 더 큰 경우 이미지 크기 조정 (조건부로 버전 생성)

예 :

version :thumb, :if => :is_thumbnable? do 
    process :resize_to_fit => [32,nil] 
end 

protected 

def is_thumbnable?(file) 
    image ||= MiniMagick::Image.open(file.path) 
    if image.nil? 
    if image['width'] >= 32 || image['height'] >= 32 
     true 
    else 
     false 
    end 
    else 
    false 
    end 
end 

답변

2

는 I 화상이 경우에 32 화소 후 소정의 폭을 초과하는 사이즈로 조작하는 경우에있어서 정의. 이 코드를 ImageUploader에 넣으십시오.

version :thumb do 
    process :resize_to_width => [32, nil] 
    end 

    def resize_to_width(width, height) 
    manipulate! do |img| 
     if img[:width] >= width 
     img.resize "#{width}x#{img[:height]}" 
     end 
     img = yield(img) if block_given? 
     img 
    end 
    end 
+0

새로운 구문 : 'img.resize_to_fit! (width, img.rows) if img.columns> = width' – scarver2

0

사실 @Roza 솔루션이 제대로 작동하지 않았습니다. 나는 다음과 같은 방법을 수정했다 :

process :resize_to_width => [650, nil] 

def resize_to_width(width, height) 
    manipulate! do |img| 
    if img.columns >= width 
     img.resize(width) 
    end 
    img = yield(img) if block_given? 
    img 
    end 
end 

내가 그들을 시도하고 작동하지 않았다 rmagick (2.13.2)와 레일 3.2.13, carrierwave (0.8.0)

7

를 사용 나를. 개발중인 큰 이미지의 크기를 조정할 때 서버가 차단됩니다.

  • carrierwave (0.9.0)
  • rmagick (2.13.2)

그래서 나는 문서를 살펴 얻을 : http://carrierwave.rubyforge.org/rdoc/classes/CarrierWave/RMagick.html

멋진 기능이 있습니다 : resize_to_limit(width, height)

원본 크기로 유지하면서 지정된 크기에 맞게 이미지의 크기를 조정하십시오. t 비율. 이미지가 지정된 크기보다 큰 경우에만 이미지의 크기를 조정합니다. 결과 이미지는 더 작은 차원에서 지정된 것보다 짧거나 더 좁을 수 있지만 지정된 값보다 클 수 없습니다. 이 같은

내 코드를 보면 :

version :version_name, from_version: :parent_version_name do 
    process resize_to_limit: [width, nil] 
end 

그것은/h로 w 비율을 존중, 더 큰의 경우에만 너비에 맞게 크기를 조정합니다.