4

rmagick / imagemagickのエクステントを使用して、特定のサイズのキャンバスの中央に画像を配置しています。

私のマシンの中には、それらを中心に置くものもあれば、反対のことをするものもあります。あるマシンで動作するようにコードを修正すると、他のマシンではまったく逆になります。

なぜこれが起こっているのか誰かが知っていますか?

4

1 に答える 1

5

私は実際にすでに答えを知っていました-コードとの5時間の苦労の後。参考のためにこれを投稿してください。

いくつかの未知の(そして私は愚かなと思う)理由のために、これはImageMagickの変更ログに現れました:

2010-09-13 6.6.4-2 Cristy <quetzlzacatenango@image...>
# Don't negate the geometry offset for the -extent option.

何らかの理由で、ImageMagickチームは、リリースで歴史的に行われてきたこととは正反対の機能を文字通り実行するように関数を変更しても問題ないと判断しました。

関数はそのままにしておく必要があり、新しい動作を備えた結果関数が導入された可能性があり、元の関数はいくつかのリリースで非推奨になりました(警告付き)。

このような戦略(これは、このような変更を処理するためのほぼ標準的な方法です)により、ImageMagickに対してビルドされたアクティブなコードを持つユーザーは通常どおり続行できます。代わりに、この関数の両方のバージョンをサポートするコードを作成するか、アップグレードを強制する必要があります。

次のルビーコードは、これを処理する方法の例です。誰かが自分のマシンで実行するバージョンがまったくないためです。

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'] )
于 2011-01-07T00:52:02.283 に答える