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
CarrierWave::RMagick resize_to_fit 后 PNG 图像质量的损失