2011-11-03 17 views
5

Mi piacerebbe che lo Carrierwave producesse alcune versioni di un'immagine, una in formato png e una in formato jpeg, ma non riesco a farla funzionare. Mi rendo conto che molte domande simili sono state poste sia qui che altrove, ma non sono riuscito a trovare una soluzione. Grosso modo, ecco cosa ho:Problemi con Carrierwave: conversione

class MyUploader < CarrierWave::Uploader::Base 
    include CarrierWave::RMagick 

    version :jpeg do 
    process :convert => 'jpg' 
    # more procesors 
    process :processed => :jpg 
    end 

    version :png do 
    process :convert => 'png' 
    # more processors 
    process :processed => :png 
    end 

    def store_path(for_file = filename) 
    if version_name != :png 
     return "#{version_name}.jpg" 
    else 
     return "#{version_name}.png" 
    end 
    end 

    def filename 
    filename = if version_name != :png 
     super != nil ? super.split('.').first + '.jpg' : super 
    else 
     super != nil ? super.split('.').first + '.png' : super 
    end 
    end 

end 

Quindi, indipendentemente dal tipo di formato di immagine mi passa, questo produce due file: uno di nome jpg.jpg, e uno di nome png.png. jpg.jpg è in realtà sempre un file JPEG (come verificato con il comando di Unix), MA png.png è solo un vero file formato PNG se e solo se originariamente passo in un file formato png (passando in un file jpeg si ottiene un file in formato jpeg) !

Idee?

questo potrebbe non essere utile, ma trovo il metodo convert in Carrierwave per sé sospetto: convert(some_format) chiamate manipulate!(:format => some_format), che a sua volta chiama (some_image_object).write("#{some_format}:#{current_path}"). Ora se l'immagine originale passata è bla.format (formato = jpg, png, ecc.), current_path con un'estensione di .format (testato tramite una patch di scimmia su manipulate!). E il modo in cui la conversione del formato immagine funziona in RMagick è chiamando write con un argomento che ha l'estensione desiderata. Quindi, perché la conversione jpeg qui sopra avrebbe effettivamente luogo? E se sì, perché la conversione png fallirebbe?

Inoltre, se è utile, io sono on Rails 3.0.9 e 0.5.6 Carrierwave

Grazie!

risposta

5

, quindi non sono sicuro che il motivo per cui questo è il caso, ma si scopre che il problema è nella # more processors parte della versione png che ho nascosto sopra. Ometterli dalla versione porta a un vero file PNG per qualsiasi tipo di input. Questi processori chiamano manipulate! e fanno alcune cose. La correzione era invece di chiamare manipulate!(:format => 'png') invece. Sìì.

+0

grazie, hai salvato la mia notte –

+1

Chiunque guardi questa risposta può leggere questo: http://stackoverflow.com/questions/19625066/carrierwave-rmagick-not-removing-transparency-in-convert-to-jpg – JakeTheSnake

Problemi correlati