5

我正在使用carrierwave上传图片。我需要我的主图像版本保持其原始格式,但其他版本需要转换为 gif。

目前我正在做这样的事情:

 def filename
   change_ext_to_gif(super)
 end

 def change_ext_to_gif(ext)
   ext.chomp(File.extname(ext)) + ".gif"
 end

 version :preview do
   process :resize_to_fill => [60, 60]
   process :convert => "gif"
 end

 version :full do
   process :resize_to_limit => [320, 320]
   process :convert => "gif"
 end

 version :mobile do
   process :resize_to_limit => [72, 96]
   process :convert => "gif"
 end

当然,这也会改变我原始文件的扩展名。有没有办法解决这个问题?我想我需要覆盖版本块中的一些方法。但我无法弄清楚它们(我尝试覆盖文件名和 url 这有助于但防止版本的文件被删除)。

4

1 回答 1

6

您可以修改每个版本使用的文件名,如下所示:

 version :mobile do
   process :resize_to_limit => [72, 96]
   process :convert => "gif"
   def full_filename(for_file = model.logo.file)
     "fiename here"
   end
 end

因此,只需保留您想要的原始文件名,然后根据版本更改它。此处的 wiki 上还有更多示例:

https://github.com/jnicklas/carrierwave/wiki/How-To%3A-Move-version-name-to-end-of-filename%2C-instead-of-front

于 2011-08-17T11:14:58.450 回答