Imagick compositeImage 不应用原始宽度和高度但更小

Imagick compositeImage doesn't apply original width and height but smaller

我正在使用 Imagick 从 2 个 png 图像创建 jpeg - 一个背景和一个在背景上。但是当我合成它时,$image 比原来的要小。我试过这个:

$image->scaleimage(
                        $image->getImageWidth() * 1.46,
                        $image->getImageHeight() * 1.47
                     );

并且 $image 几乎是精确尺寸。如果我不将 $image 的原始宽度和高度相乘,它们就会变小。这是什么原因造成的,如何解决?

我使用以下代码:

$image = new Imagick($_REQUEST['image']);

$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
$image->setBackgroundColor(new ImagickPixel('transparent'));

$image->scaleimage(
                    $image->getImageWidth(),
                    $image->getImageHeight()
                 );

$background = new Imagick($_REQUEST['background']);

$background->compositeImage($image, Imagick::COMPOSITE_ADD,0, 0);

$date = date('YMd'); $name = time().$rand;

$background->writeImage(DOCROOT.'assets/uploads/'.$date.'/'.$name.'.jpg'); 

$image->destroy();
$background->destroy();

当我 var_dump($image->getImageWidth())var_dump($image->getImageHeight()) 时,会显示准确的宽度和高度。

已编辑: 这是我的原始代码。问题是,当 2 张图片合并为一张图片时,$image 的宽度和高度都小于其原始尺寸。

宽度 $image->scaleimage 我在上面使用过,我试图修复它。我将它的宽度和高度宽度乘以一些百分比,这样我就可以获得 $image 的原始大小。

但是我的问题是为什么$image没有缩放,它没有保留原来的宽度和高度,但是在sompositeImages之后它们变小了?

$image = new Imagick($_REQUEST['image']);

$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
$image->setBackgroundColor(new ImagickPixel('transparent'));

$background = new Imagick($_REQUEST['background']);
$background->compositeImage($image, imagick::COMPOSITE_ADD, 20, 10);

$date = date('YMd');$name = time().rand()&10000;
$background->writeImage(DOCROOT.'assets/uploads/'.$date.'/'.$name.'.jpg'); 

$image->destroy();
$background->destroy();

背景图片:

图片是:

当我像这样将图像放在背景上时:

Imagick 像那样合成 - 狗更小。

图片小于其原始尺寸。

您的代码几乎可以肯定完全按照您的指示执行。

输出图像的大小将与 $background 图像相同....因为这是您要将其他图像合成到的图像。

如果您希望合成在顶部的图像与背景图像大小相同,请将其缩放为背景图像的大小。

$image->scaleImage(
    $background->getImageWidth(),
    $background->getImageHeight()
);

而不是将其缩放到与原来相同的大小....

Image is smaller that its own original sizes.

合成图并没有变小。您正在将小图像合成为大图像。在您的网络浏览器中,合成图像将按比例缩小以显示,因为它太大而无法就地显示。这使得在中合成的图像看起来变小了,但实际上并没有变小。

如果您不希望合成图像(包括您正在合成到背景中的图像)按比例缩小,您应该确保它适合您要显示的网页上的元素.

或者,您可以尝试将您正在合成到背景图像上的图像放大.....放大多少是合适的.....但是我不能告诉你它应该放大多少, 'correct' 大小由您自己决定。