为什么这个RMagick调用会导致分段错误?

68

我一直在思考这里出了什么问题,已经挣扎了近一个小时,相信(或者希望)这是我忽略了的显而易见的事情。我正在使用Ruby 1.9.1、Sinatra 1.0和RMagick 2.13.1。ImageMagick和RMagick已经正确安装并可用——我已经成功地通过irb操作和保存了图片。

params数组的相关部分(为了可读性而进行了格式更改):

{"admin_user_new_image_file"=>
    {
        :filename=>"freddie-on-shetland-pony.png",
        :type=>"image/png", 
        :name=>"admin_user_new_image_file", 
        :tempfile=>#<File:/var/folders/a7/a7pO5jMcGLCww9XBGRvWfE+++TI/-Tmp-/RackMultipart20100514-20700-o2tkqu-0>,
        :head=>"Content-Disposition: form-data; name=\"admin_user_new_image_file\"; filename=\"freddie-on-shetland-pony.png\"\r\nContent-Type: image/png\r\n"
    }
}

相关代码:

post "/admin/user/:account_name/image/new/" do
  if params[:admin_user_new_image_file][:tempfile]
    thumbnail = Magick::Image.read("png:"+params[:admin_user_new_image_file][:tempfile].path).first
  end
end

错误(第229行是以“thumbnail =”开头的那一行):

config.ru:229: [BUG] Segmentation fault
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-darwin10.3.0]

-- control frame ----------
c:0042 p:---- s:0196 b:0196 l:000195 d:000195 CFUNC  :read
c:0041 p:0121 s:0192 b:0192 l:001ab8 d:000191 LAMBDA config.ru:229
c:0040 p:---- s:0189 b:0189 l:000188 d:000188 FINISH
c:0039 p:---- s:0187 b:0187 l:000186 d:000186 CFUNC  :call
c:0038 p:0018 s:0184 b:0184 l:001d78 d:000183 BLOCK  /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:865
c:0037 p:---- s:0182 b:0182 l:000181 d:000181 FINISH
c:0036 p:---- s:0180 b:0180 l:000179 d:000179 CFUNC  :instance_eval
c:0035 p:0016 s:0177 b:0175 l:000174 d:000174 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:521
c:0034 p:0024 s:0171 b:0171 l:000148 d:000170 BLOCK  /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:500
c:0033 p:---- s:0169 b:0169 l:000168 d:000168 FINISH
c:0032 p:---- s:0167 b:0167 l:000166 d:000166 CFUNC  :catch
c:0031 p:0140 s:0163 b:0163 l:000148 d:000162 BLOCK  /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:497
c:0030 p:---- s:0154 b:0154 l:000153 d:000153 FINISH
c:0029 p:---- s:0152 b:0152 l:000151 d:000151 CFUNC  :each
c:0028 p:0073 s:0149 b:0149 l:000148 d:000148 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:476
c:0027 p:0076 s:0141 b:0141 l:000140 d:000140 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:601
c:0026 p:0009 s:0137 b:0137 l:000138 d:000136 BLOCK  /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:411
c:0025 p:---- s:0135 b:0135 l:000134 d:000134 FINISH
c:0024 p:---- s:0133 b:0133 l:000132 d:000132 CFUNC  :instance_eval
c:0023 p:0012 s:0130 b:0130 l:000121 d:000129 BLOCK  /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566
c:0022 p:---- s:0128 b:0128 l:000127 d:000127 FINISH
c:0021 p:---- s:0126 b:0126 l:000125 d:000125 CFUNC  :catch
c:0020 p:0013 s:0122 b:0122 l:000121 d:000121 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566
c:0019 p:0098 s:0115 b:0115 l:000138 d:000138 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:411
c:0018 p:0019 s:0108 b:0108 l:000107 d:000107 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:399
c:0017 p:0014 s:0104 b:0104 l:000103 d:000103 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/showexceptions.rb:24
c:0016 p:0150 s:0098 b:0098 l:000097 d:000097 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/methodoverride.rb:24
c:0015 p:0031 s:0092 b:0092 l:000091 d:000091 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/commonlogger.rb:18
c:0014 p:0018 s:0084 b:0084 l:002080 d:000083 BLOCK  /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:979
c:0013 p:0032 s:0082 b:0082 l:000081 d:000081 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:1005
c:0012 p:0011 s:0078 b:0078 l:002080 d:002080 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:979
c:0011 p:0100 s:0074 b:0074 l:000ff0 d:000ff0 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/lint.rb:47
c:0010 p:0022 s:0068 b:0068 l:000067 d:000067 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/lint.rb:35
c:0009 p:0014 s:0064 b:0064 l:000063 d:000063 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/showexceptions.rb:24
c:0008 p:0031 s:0058 b:0058 l:000057 d:000057 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/commonlogger.rb:18
c:0007 p:0014 s:0050 b:0050 l:000049 d:000049 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/content_length.rb:13
c:0006 p:0320 s:0042 b:0042 l:000041 d:000041 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/handler/webrick.rb:48
c:0005 p:0256 s:0030 b:0030 l:000029 d:000029 METHOD /usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:111
c:0004 p:0382 s:0020 b:0020 l:000019 d:000019 METHOD /usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:70
c:0003 p:0123 s:0009 b:0009 l:000bc8 d:000008 BLOCK  /usr/local/lib/ruby/1.9.1/webrick/server.rb:183
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:---- s:0002 b:0002 l:000001 d:000001 TOP   
---------------------------
-- Ruby level backtrace information-----------------------------------------
config.ru:229:in `read'
config.ru:229:in `block (2 levels) in <main>'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:865:in `call'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:865:in `block in route'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:521:in `instance_eval'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:521:in `route_eval'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:500:in `block (2 levels) in route!'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:497:in `catch'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:497:in `block in route!'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:476:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:476:in `route!'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:601:in `dispatch!'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:411:in `block in call!'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `instance_eval'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `block in invoke'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `catch'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `invoke'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:411:in `call!'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:399:in `call'
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/showexceptions.rb:24:in `call'
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/methodoverride.rb:24:in `call'
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/commonlogger.rb:18:in `call'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:979:in `block in call'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:1005:in `synchronize'
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:979:in `call'
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/lint.rb:47:in `_call'
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/lint.rb:35:in `call'
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/showexceptions.rb:24:in `call'
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/commonlogger.rb:18:in `call'
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/content_length.rb:13:in `call'
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/handler/webrick.rb:48:in `service'
/usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
/usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
/usr/local/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'

-- C level backtrace information -------------------------------------------
0x10010cd8d 0   libruby.dylib                       0x000000010010cd8d rb_vm_bugreport + 77
0x10002b184 1   libruby.dylib                       0x000000010002b184 report_bug + 260
0x10002b318 2   libruby.dylib                       0x000000010002b318 rb_bug + 200
0x1000b7124 3   libruby.dylib                       0x00000001000b7124 sigsegv + 132
0x7fff8301c80a 4   libSystem.B.dylib                   0x00007fff8301c80a _sigtramp + 26
0x1032313ac 5   libMagickCore.3.dylib               0x00000001032313ac Splay + 300
0x103119245 6   libMagickCore.3.dylib               0x0000000103119245 AcquirePixelCache + 325
0x1031cb317 7   libMagickCore.3.dylib               0x00000001031cb317 AcquireImage + 375
0x10333035b 8   libMagickCore.3.dylib               0x000000010333035b ReadPNGImage + 155
0x1031418fd 9   libMagickCore.3.dylib               0x00000001031418fd ReadImage + 2221
0x101f1b72b 10  RMagick2.bundle                     0x0000000101f1b72b rd_image + 339
0x101f1b59b 11  RMagick2.bundle                     0x0000000101f1b59b Image_read + 36
0x1000fd0e4 12  libruby.dylib                       0x00000001000fd0e4 vm_call_cfunc + 340
0x1000fe9b0 13  libruby.dylib                       0x00000001000fe9b0 vm_call_method + 896
0x1000ff8fc 14  libruby.dylib                       0x00000001000ff8fc vm_exec_core + 3180
0x100104b93 15  libruby.dylib                       0x0000000100104b93 vm_exec + 1203
0x100106643 16  libruby.dylib                       0x0000000100106643 rb_vm_invoke_proc + 691
0x100106ccd 17  libruby.dylib                       0x0000000100106ccd vm_call0 + 1085
0x1000317c6 18  libruby.dylib                       0x00000001000317c6 rb_method_call + 406
0x1000fd0e4 19  libruby.dylib                       0x00000001000fd0e4 vm_call_cfunc + 340
0x1000fe9b0 20  libruby.dylib                       0x00000001000fe9b0 vm_call_method + 896
0x1000ff8fc 21  libruby.dylib                       0x00000001000ff8fc vm_exec_core + 3180
0x100104b93 22  libruby.dylib                       0x0000000100104b93 vm_exec + 1203
0x100105ce6 23  libruby.dylib                       0x0000000100105ce6 yield_under + 710
0x100106188 24  libruby.dylib                       0x0000000100106188 specific_eval + 72
0x1000fd0e4 25  libruby.dylib                       0x00000001000fd0e4 vm_call_cfunc + 340
0x1000fe9b0 26  libruby.dylib                       0x00000001000fe9b0 vm_call_method + 896
0x1000ff8fc 27  libruby.dylib                       0x00000001000ff8fc vm_exec_core + 3180
0x100104b93 28  libruby.dylib                       0x0000000100104b93 vm_exec + 1203
0x10010b6bf 29  libruby.dylib                       0x000000010010b6bf rb_f_catch + 639
0x1000fd0e4 30  libruby.dylib                       0x00000001000fd0e4 vm_call_cfunc + 340
0x1000fe9b0 31  libruby.dylib                       0x00000001000fe9b0 vm_call_method + 896
0x1000ff8fc 32  libruby.dylib                       0x00000001000ff8fc vm_exec_core + 3180
0x100104b93 33  libruby.dylib                       0x0000000100104b93 vm_exec + 1203
0x10010aac9 34  libruby.dylib                       0x000000010010aac9 rb_yield + 505
0x100007902 35  libruby.dylib                       0x0000000100007902 rb_ary_each + 82
0x1000fd0e4 36  libruby.dylib                       0x00000001000fd0e4 vm_call_cfunc + 340
0x1000fe9b0 37  libruby.dylib                       0x00000001000fe9b0 vm_call_method + 896
0x1000ff8fc 38  libruby.dylib                       0x00000001000ff8fc vm_exec_core + 3180
0x100104b93 39  libruby.dylib                       0x0000000100104b93 vm_exec + 1203
0x100105ce6 40  libruby.dylib                       0x0000000100105ce6 yield_under + 710
0x100106188 41  libruby.dylib                       0x0000000100106188 specific_eval + 72
0x1000fd0e4 42  libruby.dylib                       0x00000001000fd0e4 vm_call_cfunc + 340
0x1000fe9b0 43  libruby.dylib                       0x00000001000fe9b0 vm_call_method + 896
0x1000ff8fc 44  libruby.dylib                       0x00000001000ff8fc vm_exec_core + 3180
0x100104b93 45  libruby.dylib                       0x0000000100104b93 vm_exec + 1203
0x10010b6bf 46  libruby.dylib                       0x000000010010b6bf rb_f_catch + 639
0x1000fd0e4 47  libruby.dylib                       0x00000001000fd0e4 vm_call_cfunc + 340
0x1000fe9b0 48  libruby.dylib                       0x00000001000fe9b0 vm_call_method + 896
0x1000ff8fc 49  libruby.dylib                       0x00000001000ff8fc vm_exec_core + 3180
0x100104b93 50  libruby.dylib                       0x0000000100104b93 vm_exec + 1203
0x100106643 51  libruby.dylib                       0x0000000100106643 rb_vm_invoke_proc + 691
0x100111803 52  libruby.dylib                       0x0000000100111803 thread_start_func_2 + 835
0x100111921 53  libruby.dylib                       0x0000000100111921 thread_start_func_1 + 17
0x7fff82ff58b6 54  libSystem.B.dylib                   0x00007fff82ff58b6 _pthread_start + 331
0x7fff82ff5769 55  libSystem.B.dylib                   0x00007fff82ff5769 thread_start + 13

[NOTE]
You may encounter a bug of Ruby interpreter. Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

Abort trap

有人知道正在发生什么吗?谢谢!


我可能有点困惑,但我很惊讶它能工作。难道 # 符号不会把“tempfile:”行的剩余部分变成注释吗?看起来你没有给 tempvalue 赋值。Ruby 1.8 和 1.9 处理 "#<...>" 组合的方式可能不同吗? - AaronM
1
我可以确认这在1.9.2-rc1和rc2上也发生了。 - Matthew Savage
1
问题中的第一个代码片段很可能只是logger.debug的结果,在这种情况下,语法#<File:...>只是描述:tempfile键的值是File类的实例。可以这样想:如果那是一个真正的注释,那么所描述的哈希将是语法错误 :) - rfunduk
12个回答

91

扩展Matthew Savage的评论,按照以下步骤操作:

brew install imagemagick --disable-openmp

它又开始工作了,无需编辑文件。(我不确定他实际是在说删除标志还是不要删除标志,但上述homebrew命令在我的OSX 10.6上有效)

如果您已经安装了imagemagick,则

brew uninstall imagemagick && brew install imagemagick --disable-openmp

brew upgrade -f不再重新安装,所以您必须先卸载它。


1
"brew install -f imagemagick --disable-openmp" 对我没有起作用。我在osx(Darwin Kernel版本10.6.0)上。我尝试卸载并重新安装imagemagick,但对我没用。另一种选择是使用mini_magick gem代替rmagick,如https://github.com/jnicklas/carrierwave/issues/185中所述。 - thekindofme
2
我去点赞这个...然后发现我已经做过了。这显然曾经在雪豹上救过我...在我升级到狮子后,它又一次拯救了我...如果我能记得每次自己节省20分钟的头痛就好了... - voxobscuro
2
我遇到了与上述相同的错误,但是通过重新安装rmagick解决了问题: sudo gem uninstall rmagick sudo gem install rmagick - DiegoSalazar
在这里与Lion有同样的问题。我删除了imagemagick,使用这些标志重新安装它,删除了rmagick gem并再次构建它,结果完美无瑕!干杯 - bbonamin
3
重新安装ImageMagick后,请务必重新编译rmagick以使其适用于新的版本:gem pristine rmagick。 - mindtonic
显示剩余4条评论

34

我在运行 Ruby 1.9.2p180 的 OS X 10.6.7 上遇到了非常相似的问题。

针对 Ash Berlin 的评论,如果你正在使用 Homebrew 包管理器,你需要卸载 imagemagick 包并且清除缓存,然后才能使其正常工作。

卸载 imagemagick:

brew remove imagemagick

清除缓存:

rm -rf `brew --cache imagemagick`

然后使用此标志重新安装该软件包:

brew install -f imagemagick --disable-openmp

1
完全相同的问题,但在Mac OS 10.7上,按照这些步骤解决了问题。我还为了保险起见删除并重建了Rmagick Gem。 - Andrew
这意味着将其设置为默认答案。 - jackyalcine

30

针对那些使用MacPorts、ImageMagick 6.6.5和Ruby 1.9.2的用户:

  1. port uninstall ImageMagick(卸载ImageMagick)
  2. port edit ImageMagick(编辑ImageMagick)
  3. configure.args(大约在第100行附近)中添加--disable-openmp选项
  4. port install ImageMagick(安装ImageMagick)
  5. 移除并重新安装rmagick

这个方法对我很有效 :)


我不理解这个答案中的第三步。在我执行sudo port edit ImageMagick之后,它只给了我一些关于ImageMagick的基本信息,例如许可证、版本等。你能详细说明一下吗?谢谢。 - Leahcim
嘿@Michael,我的系统上不再有MacPorts了(已经转换到Homebrew),所以我无法为您提供逐步帮助。端口编辑应该打开Portfile,您应该在第100行附近找到所提到的变量,然后可以插入--disable-openmp。还有其他人可以帮助Michael完成更详细的第3步吗? - captainpete
哇,这个回答是在2010年的。不过,它可能会帮助到某些人。有人对这种情况有更新吗? - captainpete
1
也许有些混淆?“port edit ImageMagick”将在Portfile上打开编辑器(我使用vi)。文件的前几行确实包含“关于ImageMagic的一些基本信息”,或者说是关于Portfile的。我的文件中写着“#$Id:Portfile 90819 2012-03-15 03:06:13Z”等等。但是,如果您向下滚动到第100行,您会看到一组命令行开关,您可以添加--disable-openmp。 - jackr

5

我曾在使用Rails 3、CarrierWave和OS X 10.6以及Ruby 1.9.2时遇到了类似的问题。每次需要调整图像大小时,程序都会崩溃并报告read的错误。我采取了以下措施:

brew uninstall imagemagick
brew install imagemagick --disable-openmp

这为我解决了问题。


3

崩溃可能是由于在OSX MacPorts下的线程中访问ImageMagick引起的。 请参见帖子


1
我也遇到了1.9.1、1.9.2-rc1和1.9.2-rc2的相同问题 - 我使用homebrew来安装该软件包,所以我所做的就是编辑brew文件并删除添加“--disable-openmp”条件(在我的系统上为第58行),然后安装,问题解决了! - Matthew Savage

2
如果您已经使用brew安装了imagemagick,请使用以下命令:
brew upgrade -f imagemagick --disable-openmp

2

不是答案,只是我的经验:

我在自己的项目中也遇到了这个问题。我在使用ruby-1.9.2-p0和ruby-1.9.2-p136时,在os x(snow leopard)上出现了这个问题。

让我特别困惑的是,我可以通过rails控制台使用rmagick读取图像。但是当我从我的rails应用程序中调用完全相同的代码行时,它会像上面概述的那样崩溃。

按照上面的说明通过homebrew重建imagemagick对我来说还不够。我还必须删除rmagick gem并通过bundle重新构建它。


1
更新:这并不是一个真正的答案(我在MRI 1.9.1中仍然遇到同样的问题),但我使用RVM来更新我的MRI 1.8.7安装和gems,并尝试运行它,一切都完美地工作。我猜问题可能是RMagick与1.9.1还不完全兼容,尽管文档明确提到了Ruby 1.9的支持。

1
在 Linux 系统上升级 ImageMagick 后遇到了同样的问题。这里有一些更多的笔记。我怀疑是 ImageMagick 库和链接的 Ruby gem 不匹配(这与之前的所有评论都一致)。请查看 rubyforge 上的类似主题。http://rubyforge.org/forum/forum.php?thread_id=48036&forum_id=33 我的解决方案是放弃 RMagick,转而使用 MojoMagick - 一个非常简洁的 Ruby API,它不链接到 ImageMagick 库,而是直接使用控制台二进制文件。
它可以在这里找到:www.misuse.org/science/2008/01/30/mojomagick-ruby-image-library-for-imagemagick/
我已经构建了一个 gem,并添加了填充调整大小和裁剪功能,可在 github 上获得。https://github.com/bunnymatic/mojo_magick

0

在我的情况下,这些答案都没有解决问题。

进一步调查后,我发现我正在对一个0.02dpi的图像调用.resample(我从第三方API中获取图像,所以我不知道)。这甚至会在段错误出现后提示“磁盘几乎已满”的警报消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接