Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用Rmagick和Carrierwave调整gif文件大小而不失真_Ruby_Resize_Carrierwave_Gif - Fatal编程技术网

Ruby 使用Rmagick和Carrierwave调整gif文件大小而不失真

Ruby 使用Rmagick和Carrierwave调整gif文件大小而不失真,ruby,resize,carrierwave,gif,Ruby,Resize,Carrierwave,Gif,我试图调整gif文件的大小,但它被扭曲了。我知道我必须实现底部链接中提到的内容,但我不清楚如何使用Carrierwave实现: 下面是一个复制错误的脚本: 需要“rubygems” 需要“carrierwave” 类AvatarUploader

我试图调整gif文件的大小,但它被扭曲了。我知道我必须实现底部链接中提到的内容,但我不清楚如何使用Carrierwave实现:

下面是一个复制错误的脚本:

需要“rubygems”
需要“carrierwave”
类AvatarUploader
我终于解决了这个问题,但生成的GIF文件相当大,从500KB到4MB

过程:使用\u gif修复\u调整大小\u问题
def fix_RESIGH_issue_带有\u gif
如果file.extension.downcase='gif'&&version\u name.blank?
list=::Magick::ImageList.new.from_blob file.read
如果list.size>1
list=list.coalesce
open(当前路径,'wb'){| f | f.write list.to_blob}
结束
结束
结束

我发布这篇文章的目的是希望它对某些人有用。我能够在不必读/写文件的情况下解决问题:

def resize_with_animate(width,height)
  manipulate! do |img|
  if img[:format].downcase == 'gif'
    #coalesce animated gifs before resize.
    img.coalesce
  end
  img.resize "#{width}x#{height}>"
  img = yield(img) if block_given?
  img
end
process :resize_with_animate(300,200)

我发现上的wiki页面很有帮助。

这对我不起作用:我遇到了一个
ProcessError
:无法使用MiniMagick进行操作,可能不是图像?原始错误:`mogrify-coalescect可能是您的imagemagick或它所依赖的某个库已过时。这似乎发生在具有类似错误的其他人身上,例如:或者,您应该使用读/写操作尝试接受的版本。避免读/写的版本仍然适用于我们。