我需要帮助(我的英语不好,请尝试了解我要查找的内容)。目前,我正在基于图像转换的项目中工作,我正在使用imagick转换图像。我已经成功地改变了我的形象。我在项目中所做的就是拍摄一张照片(photo1,然后将其放置到另一张照片(photo2 {灰色是透明的})上,从而产生以下效果photo3。然后再次用photo2替换它(以创建显示手的遮罩效果),结果为(photo4。但是问题是,photo4中的photo1区域变暗了。 {请比较照片3和照片4}。谁能帮助我将photo1的原始颜色保留在photo4中。这是我的代码:
$image1 = new imagick( public_path("img/testImage2.jpg") );
$image2 = new imagick( public_path("storage/Templates/romantisch copy.png"));
$image3 = new imagick( public_path("storage/Templates/romantisch copy.png") );
//for preserving transparency
$image2->mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN);
$image3->mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN);
//resizing photo1
$image1->resizeImage(468, 729, Imagick::FILTER_LANCZOS, 1);
/* Fill background area with transparent */
$image1->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
// $image2->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$image1->setImageArtifact('compose:args', "1,0,-0.5,0.5");
$image1->setImageMatte(true);
$controlPoints = array(
0, 0, //initial point (top left)
0, 0, //targeted point (top left)
0, $image1->getImageHeight(), //initial point (bottom left)
0, $image1->getImageHeight(), //targeted point (bottom left)
$image1->getImageWidth(), 0, //initial point (top right)
$image1->getImageWidth(), 0, //targeted point (top right)
$image1->getImageWidth(), $image1->getImageHeight(), //initial point (bottom right)
$image1->getImageWidth(), $image1->getImageHeight() //targeted point (bottom right)
);
// /* Perform the distortion */
$image1->distortImage(Imagick::DISTORTION_PERSPECTIVE, $controlPoints, true);
$image2->compositeImage($image1, Imagick::COMPOSITE_OVER, 720, 368);
$image2->compositeImage($image3, Imagick::COMPOSITE_OVER, 0, 0);
/* Ouput the image */
header("Content-Type: image/png");
$image2->writeImage ("test_0.png");
echo $image2;
答案 0 :(得分:1)
找到了我的解决方案。更改我的色彩空间解决了这个问题。仍然不知道为什么。
$image2->transformImageColorspace(\Imagick::COLORSPACE_XYZ);
$image3->transformImageColorspace(\Imagick::COLORSPACE_XYZ);