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' 大小由您自己决定。
我正在使用 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' 大小由您自己决定。