由于某些日子,我会尝试使用Imagick和PHP将图像包裹在圆柱体上(后来生成带有单个图片的杯子的预览图片)。我当前的解决方案基于IM文档:http://www.imagemagick.org/Usage/mapping/
convert rose: -background black -gravity south -splice 0x8 \
\( +clone -sparse-color barycentric '0,0 black 69,0 white' \) \
\( -clone 1 -function arcsin 0.5 \) \
\( -clone 1 -level 25%,75% \
-function polynomial -4,4,0 -gamma 2 \
+level 50%,0 \) \
-delete 1 \
-virtual-pixel black -define compose:args=17x7 \
-compose Displace -composite rose_cylinder.png
我正在尝试在PHP Imagick函数中转换此命令,但结果不是我期望的。
那是我的代码:
$clondedOriginal = clone $img;
$clondedOriginal->setBackgroundColor("none");
$clondedOriginal->setGravity(Imagick::GRAVITY_SOUTH);
$mapBase = new Imagick();
$mapBase->newPseudoImage($clondedOriginal->getImageWidth(),$clondedOriginal->getImageHeight(),"canvas:white");
$mapBase->sparseColorImage(Imagick::SPARSECOLORMETHOD_BARYCENTRIC,[0,1,$mapBase->getImageWidth(),1]);
$mapBase->writeImage($dir . "/testBase.png");
$xMap = clone $mapBase;
$xMap->functionImage(Imagick::FUNCTION_ArcsIN,[0.5]);
$xMap->writeImage($dir . "/testX.png");
$yMap = clone $mapBase;
$quantumLong = Imagick::getQuantumRange()['quantumRangeLong'];
$yMap->levelImage( 0.25 * $quantumLong,$yMap->getImageGamma(),0.75 * $quantumLong,Imagick::CHANNEL_ALL);
$yMap->functionImage(Imagick::FUNCTION_POLYNOMIAL,[-4,0]);
$yMap->levelImage(0.5 * $quantumLong,0);
$yMap->writeImage($dir . "/testY.png");
$clondedOriginal->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_BLACK);
$clondedOriginal->setImageArtifact("compose:args","200x0");
$clondedOriginal->compositeImage($xMap,Imagick::COMPOSITE_DISPLACE,0);
$clondedOriginal->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_BLACK);
$clondedOriginal->setImageArtifact("compose:args","0x200");
$clondedOriginal->compositeImage($yMap,0);
$clondedOriginal->writeImage($dir . "/didit.png");
我尝试的每一步都生成Testimages。他们在这里
我希望有人可以帮助我。