我正在使用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();
图像比原始尺寸小。
答案 0 :(得分:1)
您的代码几乎肯定正在完成您告诉它的操作。
输出图像的大小与$background
图像的大小相同....因为这是您将另一张图像合成的图像。
如果您希望顶部合成的图像与背景图像的尺寸相同,则将其缩放为背景图像的大小。
$image->scaleImage(
$background->getImageWidth(),
$background->getImageHeight()
);
而不是将它缩放到它已经是相同的大小....
图像比原始尺寸小。
合成图像不小。您正在将小图像合成为大图像。在您的网络浏览器中,然后缩小合成图像以显示,因为它太大而无法在适当的位置显示。这使得在中合成的图像显示更小,但实际上并不小。
如果您不希望缩小合成图像(包括您合成的图像到背景中),则应确保它适合您尝试显示的网页上的元素。
或者,您可以尝试将合成的图像放大到背景图像上......然而,这是多么合适.....但是我无法告诉您它应该缩放多少,你自己决定“正确”的大小是什么。