Was ich aus Leistungsgründen brauche, ist, dass die Thumb-Versionen das PNG-Format und die Erweiterung beibehalten. Das Format scheint korrekt zu konvertieren, speichert aber die Bilder mit .jpg-Erweiterungen.Rails und Carrierwave, speichern Versionen mit verschiedenen Erweiterungen
So habe ich diesen Code für meinen Benutzer Avatar:
class UserAvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
version :large do
process resize_to_fit: [ 600, 600 ], convert: 'jpg'
end
version :small, from_version: :large do
process resize_to_fill: [ 216, 216 ], convert: 'jpg'
end
version :thumb, from_version: :small do
process resize_to_fill: [ 80, 80 ], convert: 'png'
end
version :tiny, from_version: :thumb do
process resize_to_fill: [ 50, 50 ], convert: 'png'
end
def filename
"#{secure_token}.#{file.extension}" if original_filename.present?
end
protected
def secure_token
var = :"@#{mounted_as}_secure_token"
model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
end
end
Und es speichert die Bilder wie folgt aus:
- cbc9418c-FFAA-49da-A530-f940d3da2868.jpg
- large_cbc9418c -ffaa-49da-A530-f940d3da2868.jpg
- small_cbc9418c-FFAA-49da-A530-f940d3da2868.jpg
- thumb_cbc9 418c-FFAA-49da-A530-f940d3da2868.jpg
- tiny_cbc9418c-FFAA-49da-A530-f940d3da2868.jpg
Auch wenn ich ändern den gesamten Code zu:
class UserAvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
version :large do
process resize_to_fit: [ 600, 600 ], convert: :jpg
end
version :small do
process resize_to_fill: [ 216, 216 ], convert: :jpg
end
version :thumb do
process resize_to_fill: [ 80, 80 ], convert: :png
end
version :tiny do
process resize_to_fill: [ 50, 50 ], convert: :png
end
end
Es speichert alle Bilder mit der Erweiterung jpg, WTF.
ich mit diesem gehe verrückt, irgendwelche Vorschläge?
UPDATE
Ich habe den nächsten Code versucht
class UserAvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
version :large do
process resize_to_fit: [ 600, 600 ], convert: :jpg
end
version :small do
process resize_to_fill: [ 216, 216 ], convert: :jpg
end
version :thumb do
process resize_to_fill: [ 80, 80 ], convert: :png
end
version :tiny do
process resize_to_fill: [ 50, 50 ], convert: :png
end
def filename
"#{secure_token}.#{file.extension}" if original_filename.present?
end
protected
def secure_token
var = :"@#{mounted_as}_secure_token"
model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
end
end
Und es lädt die richtigen Bilder zu S3, aber dann speichert user.avatar alle Versionen in .jpg WTF !!!!. Es ist wirklich seltsam, was jetzt passiert ...
Console:
> user = User.find(id)
> user.avatar.recreate_versions!
> user.save!
> user.avatar.large.url
=> "http://bucket.s3.amazonaws.../large_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.small.url
=> "http://bucket.s3.amazonaws.../small_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.thumb.url
=> "http://bucket.s3.amazonaws.../thumb_96a1f5a4-cf07-490f-9711-618e04071950.png"
> user.avatar.tiny.url
=> "http://bucket.s3.amazonaws.../tiny_96a1f5a4-cf07-490f-9711-618e04071950.png"
> reload!
> user = User.find(id)
> user.avatar.large.url
=> "http://bucket.s3.amazonaws.../large_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.small.url
=> "http://bucket.s3.amazonaws.../small_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.thumb.url
=> "http://bucket.s3.amazonaws.../thumb_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.tiny.url
=> "http://bucket.s3.amazonaws.../tiny_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
I SIE
Versuchen Sie, die Dateiname-Methode im Versionsblock zu definieren. Sehen Sie sich dieses Problem an. Es könnte Ihnen helfen: https://github.com/carrierwaveuploader/carrierwave/issues/378 –