почему поведение степени (imagemagick) не одинаково на моих машинах? - PullRequest
4 голосов
/ 07 января 2011

Я использую экстент в rmagick / imagemagick для центрирования изображений на холсте определенного размера.

На некоторых моих машинах он центрирует их, на других - наоборот. Если я исправляю код для работы на одной машине, он делает противоположное на другой.

Кто-нибудь знает, почему это происходит?

1 Ответ

5 голосов
/ 07 января 2011

Я на самом деле уже знал ответ - после 5 часов борьбы с кодом.Просто отправьте это для справки.

По какой-то неизвестной (и я считаю глупой) причине это появилось в журнале изменений ImageMagick:

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

По какой-то причине команда ImageMagick решила, что все в порядкечтобы изменить функцию, чтобы сделать буквально точную противоположность того, что он исторически совершил в выпуске.

функция должна была остаться как есть, следственная функция с новым поведением могла бы иметьбыла введена, и оригинальная функция устарела - с предупреждениями - в течение нескольких выпусков.

Такая стратегия, которая в значительной степени является стандартным способом обработки подобных изменений, позволила бы тем, кто с активным кодом, созданным на ImageMagick, продолжать работать в обычном режиме.Вместо этого люди теперь должны писать код, поддерживающий обе версии этой функции, или форсировать обновления.

следующий код ruby ​​является примером того, как с этим справиться, поскольку у вас НЕТ ИДЕИ, КАКИЕ версии кто-то будет использоватьна своей машине.

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'] )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...