2015-06-18 6 views
0

Я хочу создать несколько версий, таких как: large,: medium,: small. Пока нет проблем. Но как эти методы вызывают?carrierwave: несколько вариантов стратегии

Простой тест:

version :large do 
    process :resize_to_fit => [1024, 1024] 
end 
version :large2, :from_version=>:large do 
    process :resize_to_fit => [1024, 1024] 
end 

результаты в двух разных файлах размера. Я бы предположил, что версии идентичны. Поэтому я предполагаю: big2 перечитывает файл (большой) с диска в RMagick?

Как я могу это сделать «правильно»? (Я бы использовал один и тот же RMagick-Object для создания версий). Я хочу попытаться сохранить carriewave-way и не делать слишком много самостоятельно.

Спасибо и приветствуем любые намеки, Фил.

ответ

0

Пример для создания 3 типичных размеров файлов изображений с использованием Carrierwave MiniMagick в файле uploader.rb

# Create different versions of your uploaded files. 
    version :full do 
    process :resize_to_fill => [1024, 1024] 
    end 

    version :large_thumb, :from_version => :full do 
    process :resize_to_fill => [300, 300] 
    end 

    version :thumb, :from_version => :large_thumb do 
    process :resize_to_fill => [100, 100] 
    end  

соображения эффективности MiniMagick при создании изображений различных размеров

MiniMagick документы предполагают для обработки эффективность, чтобы начать с самого большого размера разрешения и работать вниз, каскадируя файлы размера размера вместо того, чтобы начинать с большого каждый раз в качестве базового файла, преобразованного (https://github.com/carrierwaveuploader/carrierwave).

Создание версии из существующих версий

По причинам производительности, часто бывает полезно для создания версии из существующих вместо использования исходного файла. Если ваш загрузчик генерирует несколько версий, где следующий меньше последнего, то займет меньше времени для создания с меньшего, уже обработанного изображения .

Вы можете сделать это с : from_version директивы, показанной в приведенном выше примере.

MiniMagick resize_to_fill против resize_to_fit, аспект соотношения, масштабирование

MiniMagick дает вам различные варианты обработки изображений. Я считаю, resize_to_fill работает для моих целей лучше, чем resize_to_fit, но ваш пробег может отличаться. Существуют соображения при выборе параметра повторного выбора изображения, особенно в том случае, если размер рациона исходного изображения не соответствует таковому целевого изображения размера.

Вот ImageMagick спецификации со всеми магии изображения, которое использует MiniMagick: http://www.imagemagick.org/Usage/resize/#resize

MiniMagick gemspec https://github.com/minimagick/minimagick

+0

Спасибо за ваш ответ. Но мой вопрос заключался в повторном использовании одного и того же объекта Magick :: Image (вместо повторного чтения файла с диска) для дальнейшего улучшения производительности. Также мне кажется, что это не способствует лучшему качеству изображения, когда он jpeg-сжат и декомпрессируется чаще, чем необходимо. – Phil

+0

Это не jpeg-сжатие и распаковка больше времени, чем необходимо. Именно так ImageMagick предлагает вам создавать разные размеры.Если вы не хотите делать это, все в порядке; это ваш выбор, но ответ правильный. Если у вас есть момент, прочитайте спецификацию ImageMagick, на которую я указал, вы можете прочитать все о том, как IM занимается вопросами повторной выборки. Удачи. – Elvn

+0

Моя проблема заключается не в том, как imagemagick имеет дело с конкретными изображениями. Моя проблема в том, как carrierwave реализует экземпляр для разных «версий». Поэтому возникает вопрос: читается ли файл с диска, для каждой «версии» или повторно используется ImageMagick/MiniMagick-Object между ними. (большой и большой2 в моем примере) И, насколько я вижу, он НЕ читает снова с диска. Поэтому мое предположение было просто неправильным, и вопрос неактуальен. Я пробовал с сотнями «версий» (каждый из тех же процессоров), и файлы версий, кажется, все написаны в конце. – Phil

Смежные вопросы