2011-12-21 2 views
9

처리 된 이미지의 크기를 지정해야합니다. 내 ImageUploader 클래스CarrierWave로 이미지 높이 검색

내가 가진

:

version :post do 
    process :resize_to_fit => [200, nil] 
end 

나는이 유사한 이미지의 크기를 얻을 수있는 방법이 있나요?

height = @picture.image_height(:post) 

답변

12

: http://code.dblock.org/carrierwave-saving-best-image-geometry

그것을 프로세스를 추가 한 다음 Magick의 메서드를 호출하여 이미지 지오메트리를 가져옵니다.

코드 :

version :post do 
    process :resize_to_fit => [200, nil] 
    process :get_geometry 

    def geometry 
     @geometry 
    end 
    end 

    def get_geometry 
    if (@file) 
     img = ::Magick::Image::read(@file.file).first 
     @geometry = [ img.columns, img.rows ] 
    end 
    end 
+1

+1이 방법은 훨씬 깨끗하며 RMagick에서 권장하는 방법과 비슷합니다. 여기에 : http://www.imagemagick.org/RMagick/doc/comtasks.html – iwasrobbed

+0

여기에 대해서는 잘 모르겠지만 .ping 대신 .ping을 권유하게한다. (http://stackoverflow.com/a/에서. 16267106/4738391) –

1

는 내가 주위에 몇몇과 게시물에 와서 봤 다음

소스 링크 http://groups.google.com/group/carrierwave/browse_thread/thread/c5e93b45bde8a85e?fwc=1&pli=1

class HeaderUploader < CarrierWave::Uploader::Base 
    storage :right_s3 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 
    def url 
    ["http://#{s3_bucket}.s3.amazonaws.com/", path].compact.join 
    end 
    before :cache, :capture_size_before_cache 
    before :retrieve_from_cache, :capture_size_after_retrieve_from_cache 
    def capture_size_before_cache(new_file) 
    model.header_width, model.header_height = `identify -format "%wx 
%h" #{new_file.path}`.split(/x/) 
    end 
    def capture_size_after_retrieve_from_cache(cache_name) 
    model.header_width, model.header_height = `identify -format "%wx 
%h" #[email protected]}`.split(/x/) 
    end 
    def dimensions 
    "#{model.header_width}x#{model.header_height}" 
    end 
end 
당신은 조정 방법이 여기에 설명 사용할 수 있습니다
7

당신은에 연결할 수 있습니다 : 캐시와 : retrieve_from_cache 방법

시스템에 의존 할 필요가 없습니다 중 하나를 명령 :

# Somewhere in your uploader: 
attr_reader :geometry 
after :cache, :capture_size 
after :retrieve_from_cache, :capture_size 
def capture_size(*args)  
    img = ::MiniMagick::Image::read(File.binread(@file.file)) 
    @geometry = [img[:width], img[:height]] 
end 

http://www.glebm.com/2012/05/carrierwave-image-dimensions.html

+0

감사합니다. 답으로 표시된 해결책이 나에게 도움이되지 못했습니다. 좋은 & 간단한 해결책. –

+0

가장 큰 버전의 크기 만 캡처합니다. https://github.com/gzigzigzeo/carrierwave-meta를 사용하여 여러 버전을 지원할 수 있습니다 (다른 예제와 마찬가지로 프로세스가 추가됩니다). 또한 여기서는'binread'를 사용하는 것으로 보이기 때문에 아마도 효율적이지 않을 것입니다. 여기서는 헤더 대신 전체 파일을 읽습니다. – glebm

관련 문제