为什么我的机器上的范围(imagemagick)行为不均匀?

Jon*_*sco 4 rmagick imagemagick

我在rmagick/imagemagick中使用extent来将图像置于特定大小的画布上.

在我的一些机器上,它以它们为中心 - 在其他机器上则相反.如果我修复代码在一台机器上工作,那么它就完全相反了.

有谁知道为什么会这样?

Jon*_*sco 5

我实际上已经知道了答案 - 经过5个小时的代码挣扎.只是张贴这个以供参考.

对于一些未知的(我认为是愚蠢的)原因,这出现在ImageMagick更改日志中:

2010-09-13 6.6.4-2 Cristy <quetzlzacatenango@image...>
# Don't negate the geometry offset for the -extent option.
Run Code Online (Sandbox Code Playgroud)

无论出于何种原因,ImageMagick团队决定改变一个功能,以便在一个版本中做出历史性的完全对立.

该函数应保持原样,可以引入新行为的推论函数,并且在几个版本中不推荐使用原始函数 - 带有警告.

像这样的策略 - 这几乎是处理这种变化的标准方法 - 可以让那些具有针对ImageMagick构建的活动代码的人继续照常进行.相反,人们现在必须编写支持此功能的两个版本或强制升级的代码.

下面的ruby代码是如何处理这个问题的一个例子,因为你没有IDEA WHATSOEVER某人将在他们的机器上运行什么版本.

offset_coords= { 'x' => 100 , 'y' => 100 }
expects_negated = true
# ImageMagick 6.6.4-2 changed the behavior of extent
# me: !(*@&#(#! .
#mversion = "ImageMagick 6.6.4-1 2010-12-07 Q16 http://www.imagemagick.org"
mversion = Magick::Magick_version
( v_version , v_commit ) = mversion.split(' ')[1].split('-')
( v_version_1 , v_version_2 , v_version_3 ) = v_version.split('.')
if Integer(v_version_1) >= 6 and Integer(v_version_2) >= 6 and Integer(v_version_3) >= 4 and Integer(v_commit) >= 2
    expects_negated= false
end
if expects_negated 
    offset_coords['x'] = - offset_coords['x']
    offset_coords['y'] = - offset_coords['y']
end

@new_image.background_color= "#000000"
@new_image = @new_image.extent( target_dimensions['w'] , target_dimensions['h'] , offset_coords['x'] , offset_coords['y'] )
Run Code Online (Sandbox Code Playgroud)