基于php的三维画布框架

基于php的三维画布框架,php,image,imagemagick,imagick,Php,Image,Imagemagick,Imagick,我正在做一个在运行时创建框架的项目,但是 业主想要困难的事情:)我设法对这个项目做了一些事情 但业主希望看到这些: 及 我在互联网上找到了一些代码,就是这样。 结果: 谢谢你的帮助 我也是imagick的新手,我相信我们正在做同样的项目 这是我的方法,但需要改进 $im = new Imagick('Koala.jpg'); $im->setImageFormat('png'); $im->cropThumbnailImage(300,200); $p1 = $im->

我正在做一个在运行时创建框架的项目,但是 业主想要困难的事情:)我设法对这个项目做了一些事情

但业主希望看到这些:

我在互联网上找到了一些代码,就是这样。

结果:

谢谢你的帮助


我也是imagick的新手,我相信我们正在做同样的项目

这是我的方法,但需要改进

$im = new Imagick('Koala.jpg');
$im->setImageFormat('png');
$im->cropThumbnailImage(300,200);

$p1 = $im->clone();
$p1->cropImage(50, 150, 0, 25);
$p1->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$p1->setImageMatte(true);

$cPoints = array(
    0,0, 5,5, 
    50,0, 50,0, 
    0,150, 5,145, 
    50,150, 50,150 
);

$p1->distortImage(Imagick::DISTORTION_BILINEAR, $cPoints, true);

$p2 = $im->clone();
$p2->cropImage(5, 150, 50, 25);
$p2->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$p2->setImageMatte(true);

$cPoints2 = array(
    0,0, 0,0, 
    5,0, 5,5, 
    0,150, 0,150, 
    5,150, 5,145 
);    

$p2->distortImage(Imagick::DISTORTION_BILINEAR, $cPoints2, true);

$canvas1 = new Imagick();
$canvas1->newImage(55, 200, 'none','png');
$canvas1->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$canvas1->setImageMatte(true);

$canvas1->compositeImage( $p1, imagick::COMPOSITE_OVER, 0,25 );
$canvas1->compositeImage( $p2, imagick::COMPOSITE_OVER, 50,25 );

$p3 = new Imagick();
$p3->newImage(10, 200, 'none','png');
$p3->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);

$p4 = $im->clone();
$p4->cropImage(50, 200, 65, 0);
$p4->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$p4->setImageMatte(true);

$cPoints4 = array(
    0,0, 5,5, 
    50,0, 50,0, 
    0,200, 5,195, 
    50,200, 50,200 
);

$p4->distortImage(Imagick::DISTORTION_BILINEAR, $cPoints4, true);

$p5 = $im->clone();
$p5->cropImage(5, 200, 135, 0);
$p5->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$p5->setImageMatte(true);

$cPoints5 = array(
    0,0, 0,0, 
    5,0, 5,5, 
    0,200, 0,200, 
    5,200, 5,195 
);

$p5->distortImage(Imagick::DISTORTION_BILINEAR, $cPoints5, true);

$p6 = new Imagick();
$p6->newImage(10, 200, 'none','png');
$p6->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);

$p7 = $im->clone();
$p7->cropImage(50, 150, 150, 25);
$p7->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$p7->setImageMatte(true);

$cPoints7 = array(
    0,0, 5,5, 
    50,0, 50,0, 
    0,150, 5,145, 
    50,150, 50,150 
);

$p7->distortImage(Imagick::DISTORTION_BILINEAR, $cPoints7, true);

$p8 = $im->clone();
$p8->cropImage(5, 150, 200, 25);
$p8->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$p8->setImageMatte(true);

$cPoints8 = array(
    0,0, 0,0, 
    5,0, 5,5, 
    0,150, 0,150, 
    5,150, 5,145 
);

$p8->distortImage(Imagick::DISTORTION_BILINEAR, $cPoints8, true);

$canvas2 = new Imagick();
$canvas2->newImage(55, 200, 'none','png');
$canvas2->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$canvas2->setImageMatte(true);

$canvas2->compositeImage( $p7, imagick::COMPOSITE_OVER, 0,25 );
$canvas2->compositeImage( $p8, imagick::COMPOSITE_OVER, 50,25 );

$pImage = new Imagick();
$pImage->addImage($canvas1);
$pImage->addImage($p3);
$pImage->addImage($p4);
$pImage->addImage($p5);
$pImage->addImage($p6);
$pImage->addImage($canvas2);
$pImage->resetIterator();

$combined = $pImage->appendImages(false);

$shadow = $combined->clone(); 

$shadow->setImageBackgroundColor( new ImagickPixel( 'black' ) ); 

$shadow->shadowImage( 50, 3, 5, 5 ); 


$shadow->compositeImage( $combined, Imagick::COMPOSITE_OVER, 0, 0 ); 

header("Content-Type: image/png");
echo $shadow;
结果是,

我希望有帮助
但是,如果您找到一个更简单的解决方案,请告诉我们,因为我也需要它:)

我想您可以裁剪图像并分别处理每个部分。与人们想要的许多其他效果一样,你会遇到一个问题,那就是如果用户输入不多的话,也需要一些效果,因为图像的高度不同。我确实尝试了一些在感兴趣的领域工作的代码,但我现在找不到。那么,到目前为止您尝试了什么,您遇到了什么具体问题?只要你的问题只是没有在网上找到合适的代码块,我们就无能为力,你需要更努力地搜索,或者开始自己编写代码。但是,如果你开始自己的(修改),你可能能够制定一个可以回答的实际问题。如果您能相应地更新您的问题,我将不胜感激(图片已经很好了,但是问题非常广泛)。您知道,您可以通过css3非常接近这一点。请查看google play主页,他们做了一些类似于旋转三角形的事情。@TacettinÖzbölük:告诉你的主人加入这里,这样我们可以讨论细节;)
$im = new Imagick('Koala.jpg');
$im->setImageFormat('png');
$im->cropThumbnailImage(300,200);

$p1 = $im->clone();
$p1->cropImage(50, 150, 0, 25);
$p1->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$p1->setImageMatte(true);

$cPoints = array(
    0,0, 5,5, 
    50,0, 50,0, 
    0,150, 5,145, 
    50,150, 50,150 
);

$p1->distortImage(Imagick::DISTORTION_BILINEAR, $cPoints, true);

$p2 = $im->clone();
$p2->cropImage(5, 150, 50, 25);
$p2->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$p2->setImageMatte(true);

$cPoints2 = array(
    0,0, 0,0, 
    5,0, 5,5, 
    0,150, 0,150, 
    5,150, 5,145 
);    

$p2->distortImage(Imagick::DISTORTION_BILINEAR, $cPoints2, true);

$canvas1 = new Imagick();
$canvas1->newImage(55, 200, 'none','png');
$canvas1->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$canvas1->setImageMatte(true);

$canvas1->compositeImage( $p1, imagick::COMPOSITE_OVER, 0,25 );
$canvas1->compositeImage( $p2, imagick::COMPOSITE_OVER, 50,25 );

$p3 = new Imagick();
$p3->newImage(10, 200, 'none','png');
$p3->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);

$p4 = $im->clone();
$p4->cropImage(50, 200, 65, 0);
$p4->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$p4->setImageMatte(true);

$cPoints4 = array(
    0,0, 5,5, 
    50,0, 50,0, 
    0,200, 5,195, 
    50,200, 50,200 
);

$p4->distortImage(Imagick::DISTORTION_BILINEAR, $cPoints4, true);

$p5 = $im->clone();
$p5->cropImage(5, 200, 135, 0);
$p5->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$p5->setImageMatte(true);

$cPoints5 = array(
    0,0, 0,0, 
    5,0, 5,5, 
    0,200, 0,200, 
    5,200, 5,195 
);

$p5->distortImage(Imagick::DISTORTION_BILINEAR, $cPoints5, true);

$p6 = new Imagick();
$p6->newImage(10, 200, 'none','png');
$p6->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);

$p7 = $im->clone();
$p7->cropImage(50, 150, 150, 25);
$p7->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$p7->setImageMatte(true);

$cPoints7 = array(
    0,0, 5,5, 
    50,0, 50,0, 
    0,150, 5,145, 
    50,150, 50,150 
);

$p7->distortImage(Imagick::DISTORTION_BILINEAR, $cPoints7, true);

$p8 = $im->clone();
$p8->cropImage(5, 150, 200, 25);
$p8->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$p8->setImageMatte(true);

$cPoints8 = array(
    0,0, 0,0, 
    5,0, 5,5, 
    0,150, 0,150, 
    5,150, 5,145 
);

$p8->distortImage(Imagick::DISTORTION_BILINEAR, $cPoints8, true);

$canvas2 = new Imagick();
$canvas2->newImage(55, 200, 'none','png');
$canvas2->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$canvas2->setImageMatte(true);

$canvas2->compositeImage( $p7, imagick::COMPOSITE_OVER, 0,25 );
$canvas2->compositeImage( $p8, imagick::COMPOSITE_OVER, 50,25 );

$pImage = new Imagick();
$pImage->addImage($canvas1);
$pImage->addImage($p3);
$pImage->addImage($p4);
$pImage->addImage($p5);
$pImage->addImage($p6);
$pImage->addImage($canvas2);
$pImage->resetIterator();

$combined = $pImage->appendImages(false);

$shadow = $combined->clone(); 

$shadow->setImageBackgroundColor( new ImagickPixel( 'black' ) ); 

$shadow->shadowImage( 50, 3, 5, 5 ); 


$shadow->compositeImage( $combined, Imagick::COMPOSITE_OVER, 0, 0 ); 

header("Content-Type: image/png");
echo $shadow;