我正在使用RMagick处理ruby项目,我从文件中加载图像,使用裁剪部分初始化对象,然后尝试重新裁剪这些子图像。对于裁剪裁剪图像,它会创建尺寸为1x1的图像。
然而,它适用于我创造的玩具,琐碎的版本:
i = Image.read('sample.png')[0]
=> sample.png PNG 1000x800 1000x800+0+0 DirectClass 8-bit 47kb
si = i.crop(50, 50, 900, 700)
=> sample.png PNG 1000x800=>900x700 1000x800+50+50 DirectClass 8-bit
ssi = i.crop(50, 50, 800, 600)
=> sample.png PNG 1000x800=>800x600 1000x800+100+100 DirectClass 8-bit
等等。
它似乎无限期地工作,至少在4代之后。
但是,我的代码肯定不起作用。我已经无法构建一个不起作用的简单版本,但这是我实际代码的简化相关部分。
https://gist.github.com/mikaylathompson/9ca5db7569d6bfba6008
doc = Document.new('sample.png')
doc.split
doc.sort
# This image is just fine
doc.tables[0].image
=> sample.png PNG 1000x800=>745x150 1000x800+125+350
doc.tables[0].divide_rows
# and this image failed
doc.tables[0].rows[0].image
=> sample.png PNG 1000x800=>1x1 1000x800-1-1 DirectClass 8-bit
# this fails too, so it's based on the image, not the dimensions
doc.tables[0].image.crop(50, 50, 100, 100)
=> sample.png PNG 1000x800=>1x1 1000x800-1-1 DirectClass 8-bit
答案 0 :(得分:1)
您可以通过传递“真实”来告诉crop()不要在派生图像中的源图像中包含元数据维度(这些维度似乎会干扰庄稼作物)。作为最后一个参数,如:
doc.tables[0].image.crop(50, 50, 100, 100, true)