RMagick 无法裁剪裁剪的图像?

Posted

技术标签:

【中文标题】RMagick 无法裁剪裁剪的图像?【英文标题】:RMagick can't crop a cropped image? 【发布时间】:2015-04-22 02:19:59 【问题描述】:

我正在使用 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

【问题讨论】:

尝试在裁剪后添加repage,以便图像“忘记”它曾经是更大图像的一部分。 【参考方案1】:

你可以告诉crop()不要在派生图像中包含来自源图像的元数据维度(这些似乎会干扰作物的作物),方法是将'true'作为最后一个参数传递,如下所示:

doc.tables[0].image.crop(50, 50, 100, 100, true)

【讨论】:

以上是关于RMagick 无法裁剪裁剪的图像?的主要内容,如果未能解决你的问题,请参考以下文章

未定义的方法`marked_for_destruction?' CarrierWave,RMagick

无法从 Facebook 载波上传图片

裁剪大图像周围的空白区域

CarrierWave::RMagick resize_to_fit 后 PNG 图像质量的损失

使用 Cloudinary 和 Carrierwave 进行 RMagick 压缩

来自GrayScale的Ruby + RMagick + base64图像+ RGB转换不起作用