4

반송파를 사용하고 있는데이 문제가 있습니다. 일단 프로젝트가 전달되면 시스템의 이미지를 다른 크기로 표시해야하는 섹션을 추가해야한다고 가정합니다. 이미 시스템에있는 각 이미지에 대한 새로운 차원을 재생성하고 싶지 않습니다. 보기가 필요할 때마다 생성하고 캐시 할 수 있기를 원합니다. 비슷한 : "/>. 새로운 크기 500x150이 이미 존재하면 캐시 된 URL을 반환하고 그렇지 않으면 캐시 된 URL을 반환합니다.즉각적인 반송파 크기 조정

저는 Carrierwave를 좋아하지만 불행히도 크기를 조정할 수있는 기능은 없습니다. 이 기능을 추가하는 것은 꽤 간단해야한다고 말하지만, 거의 아무것도 발견하지 못했습니다. 가까운 업 그레 이드가이 업 로더입니다. https://gist.github.com/DAddYE/1541912 내 버전이기 때문에 수정해야합니다.

class ImageUploader < FileUploader 
    include CarrierWave::RMagick 

    #version :thumb do 
    # process :resize_to_fill => [100,100] 
    #end 
    # 
    #version :thumb_square do 
    # process :resize_to_fill => [100,100] 
    #end 
    # 
    #version :full do 
    # process :resize_to_fit => [550, 550] 
    #end 


    def re_size(string_size) 
    if self.file.nil? 
     return self 
    end 

    begun_at = Time.now 
    string_size.gsub!(/#/, '!') 
    uploader = Class.new(self.class) 
    uploader.versions.clear 
    uploader.version_names = [string_size] 
    img = uploader.new(model, mounted_as) 
    img.retrieve_from_store!(self.file.identifier) 
    cached = File.join(CarrierWave.root, img.url) 
    unless File.exist?(cached) 
     img.cache!(self) 

     img.send(:original_filename=, self.file.original_filename) 
     size = string_size.split(/x|!/).map(&:to_i) 
     resizer = case string_size 
        when /[!]/ then :resize_to_fit 
        # add more like when />/ then ... 
        else :resize_to_fill 
       end 
     img.send(resizer, *size) 
     FileUtils.mv(img.file.file, cached) 
     #img.store! 
    end 
    img 
    end 

    def extension_white_list 
    %w[jpg jpeg gif png] 
    end 

    def filename 
    Digest::MD5.hexdigest(original_filename) << File.extname(original_filename) if original_filename 
    end 

    def cache_dir 
    "#{Rails.root}/tmp/uploads" 
    end 

    def default_url 
    '/general/no-image.png' 
    end 
end 

이 버전의 문제는 re_size ("100x100"). url을 호출 할 때 분명히 실제 크기가 조정 된 이미지가 생성되기 전에 url이 생성되어 반환된다는 것입니다. 결과적으로 임의의 후속 새로 고침시 잘 표시되는 깨진 링크가있는 페이지가 생성됩니다.

누구나 공유 할 수있는 더 나은 결과를 얻었습니까? :)

잠자리로 바꾸라고 말하지 마십시오. 나는 Carrierwave를 사용하고 있으며 정말 좋아합니다. 또한 내 프로젝트의 일부인 RailsAdmin과 완벽하게 통합됩니다.

답변

0

다른 이미지 버전 (예 : 미리보기 이미지)을 생성하지 않는 이유는 무엇입니까?

# Create different versions of your uploaded files: 

include CarrierWave::RMagick 


version :thumb do 
    process :resize_to_limit => [100, 100] 
end 

당신의 image_uploader.rb에서 다음보기에 단지

<%= image_tag nameofimage.image_url(:thumb).to_s %> 

당신은 원본 이미지 크기를 조정하지 않고 우리의 원본 이미지의 여러 버전을 만들 수 있습니다 호출합니다. 처리는 설치해야 할 RMagick으로 수행됩니다.

RMagick을 사용하려면 ImageMagick이 있어야하므로 ImageMagick도 설치해야합니다. 설치 및 작동하지만 가치가있는 것은 약간 까다로울 수 있습니다. 게다가 stackoverflow 커뮤니티는이 문제에 많은 도움을주었습니다.

Error installing Rmagick on Mountain Lion

rmagick gem install "Can't find Magick-config"

+0

문제는 시간 디자인의 대부분은 매우 가난하고 내가 크기가 조정 된 이미지의 끝없는 재생에 새로운 크기가 추가 될 때마다 결과 앞서 개발의 정확한 이미지 크기를 몰라 발견되었습니다. 즉석에서 생성하는 방법이 필요합니다. – user711643

+0

위의 내용은 크기에 관계없이 원본 이미지를 가져 와서 지정된 크기 제한에 맞게 크기를 조정합니다. 나는 당신이 '날아 다니는'것에 의해 무엇을 의미하는지 모른다. – ChrisBarthol

+1

주문형이라고합니다. 프로젝트가 전달되면 시스템의 이미지를 다른 크기로 표시해야하는 섹션을 추가해야한다고 가정합니다. 이미 시스템에있는 각 이미지에 대한 새로운 차원을 재생성하고 싶지 않습니다. 보기가 필요할 때마다 생성하고 캐시 할 수 있기를 원합니다. 뭔가 : "/>. 새 크기 500x150이 이미 있으면 캐시 된 URL을 반환하고 그렇지 않으면 캐시 된 URL을 반환합니다. – user711643

관련 문제