магическая геометрия

Я столкнулся со следующей проблемой:

// $data contains some image data

$gm = new gmagick;
$gm->readImageBlob($data);
$gm->resizeImage(
    100,
    50,
    gmagick::FILTER_LANCZOS,
    1
);

$gm->readImageBlob($data);
$gm->resizeImage(
    140,
    70,
    gmagick::FILTER_LANCZOS,
    1
);
$output = $gm->getImageBlob();

print_r($gm->getImageGeometry());

будет печатать

Array ( [width] => 100 [height] => 50 )

что является неожиданным результатом. Если я выполню точно такой же код с помощью imagick вместо gmagick, я получу другой (ожидаемый) результат.

Array ( [width] => 140 [height] => 70 )

Также, что интересно, для gmagick, если я опущу строку

$output = $gm->getImageBlob(); 

то я получаю ожидаемый размер изображения 140x70..

Я пропустил что-то важное здесь?

Спасибо!


person baa2w    schedule 13.06.2012    source источник


Ответы (1)


Есть одно различие между методом getimageblob в версиях imagick и gmagick. Второй сбрасывает внутренний счетчик, поэтому у вас всегда будут размеры первого добавленного изображения, а не последнего.

версия getimageblob от gmagick

версия getimageblob от imagick

Похоже на ошибку, так как перед сбросом счетчика выполняется проверка буфера изображения. Обратите внимание, что эта функция нигде не задокументирована в разделе gmagick php net, поэтому она может не поддерживаться и не поддерживаться.

person dev-null-dweller    schedule 13.06.2012