2013-03-13 2 views
0

Я использую Carrierwave и RMagick для загрузки изображений в мое приложение Rails. У меня есть image_uploader вроде:Как установить прозрачный фон с несущей, методом resize_and_pad и jpg?

class ImageUploader < CarrierWave::Uploader::Base 

    # ... Other stuff ... 
    process :convert => 'png' 

    def filename 
    super.chomp(File.extname(super)) + '.png' 
    end 

    # ... 

    version :resized_image do 
    process :resize_and_pad => [X, Y] 
    end 

    # ... 
end 

Моей проблемы заключается в том, что, когда я загрузить изображение PNG, метод resize_and_pad добавляет прозрачный фон, чтобы соответствовать размерам, указанным. Но когда я загружаю jpg-образ, он преобразуется в png, но фон белый и не прозрачный, возможно, потому что изображение преобразуется в png после изменения размера, а не раньше.

Итак, есть ли решение этой проблемы? Есть ли какой-либо возможный способ гарантировать, что метод convert вызывается перед resize_and_pad, чтобы добавить прозрачный фон к размерному изображению?

EDIT

Я положил пример, чтобы сделать мою проблему понятнее:

в загруженном JPG нормальное изображение, например 300px × 300px. Мой resize_and_pad метод накладывает изображение на 300px × 400px. Те 100px, которые я хочу заполнить, должны быть прозрачными, но из-за того, что JPG не может иметь прозрачный фон, я пытаюсь преобразовать в PNG перед применением resize_and_pad. Моя проблема заключается в том, что конечным результатом является изображение с белым фоном вместо прозрачного фона.

+0

см. Http://stackoverflow.com/questions/19625066/carrierwave-rmagick-not-removing-transparency-in-convert-to-jpg –

ответ

0

JPG-файлы не поддерживают прозрачность, если вы видите белый фон в изображении JPEG, потому что он заполнен белым, поэтому, когда ваш загрузчик обрабатывает изображение JPEG, он верно преобразует белый фон.

+0

Я знаю это, поэтому я пытаюсь преобразовать изображение в png перед процессом изменения размера. Также этот факт указывается в документах: http://www.ruby-doc.org/gems/docs/c/carrierwave-rails3-0.4.5/CarrierWave/RMagick.html#method-i-resize_and_pad. Но это не отвечает на мой вопрос. – Pigueiras

+0

Так вы пытаетесь добиться того, чтобы преобразовать белый цвет в прозрачный формат во время преобразования? –

+0

Я поставил пример в вопросе. Может быть, вы можете лучше понять мою проблему. – Pigueiras

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