Skip to content

Drawing a image with gravity

Example output image

<?php
require 'vendor/autoload.php';
use Kehet\ImagickLayoutEngine\Containers\ColumnContainer;
use Kehet\ImagickLayoutEngine\Containers\RowContainer;
use Kehet\ImagickLayoutEngine\Enums\Gravity;
use Kehet\ImagickLayoutEngine\Enums\ImageMode;
use Kehet\ImagickLayoutEngine\Items\Image;
use Kehet\ImagickLayoutEngine\Items\Text;
function createGravityDemoContainer(string $imagePath, Gravity $gravity, ImageMode $mode): ColumnContainer
{
$container = new ColumnContainer;
$container->setMargin(10);
$container->addItem(new Image($imagePath, $mode, $gravity));
$container->addItem(new Text(
draw(fill: 'black'),
sprintf(
"gravity=%s\nmode=%s",
$gravity->value,
$mode->value
),
gravity: Gravity::CENTER
));
return $container;
}
$width = 1500;
$height = 1000;
$smallImage = 'example-image-small.jpeg';
$largeImage = 'example-image-large.jpeg';
// Create new image with white background
$imagick = new Imagick;
$imagick->newImage($width, $height, new ImagickPixel('white'));
// Define root container
$root = new ColumnContainer;
$row1 = new RowContainer;
$row1->addItem(createGravityDemoContainer($largeImage, Gravity::TOP, ImageMode::NONE));
$row1->addItem(createGravityDemoContainer($largeImage, Gravity::CENTER, ImageMode::NONE));
$row1->addItem(createGravityDemoContainer($largeImage, Gravity::BOTTOM, ImageMode::NONE));
$root->addItem($row1);
$row2 = new RowContainer;
$row2->addItem(createGravityDemoContainer($smallImage, Gravity::LEFT, ImageMode::FIT));
$row2->addItem(createGravityDemoContainer($smallImage, Gravity::CENTER, ImageMode::FIT));
$row2->addItem(createGravityDemoContainer($smallImage, Gravity::RIGHT, ImageMode::FIT));
$root->addItem($row2);
$row3 = new RowContainer;
$row3->addItem(createGravityDemoContainer($largeImage, Gravity::TOP, ImageMode::FILL));
$row3->addItem(createGravityDemoContainer($largeImage, Gravity::CENTER, ImageMode::FILL));
$row3->addItem(createGravityDemoContainer($largeImage, Gravity::BOTTOM, ImageMode::FILL));
$root->addItem($row3);
// Draw container onto image
$root->draw($imagick, 0, 0, $width, $height);
// Output image as png to file
$imagick->setImageFormat('png');
$imagick->writeImage(__DIR__ . '/06-image-gravity.png');

The same layout as a template. Templates have no equivalent to the createGravityDemoContainer() helper — a JSON tree has no loops or functions — so each of the nine demo cells is written out in full:

{
"type": "column",
"children": [
{
"type": "row",
"children": [
{
"type": "column",
"margin": 10,
"children": [
{"type":"image","file":"example-image-large.jpeg","gravity":"top"},
{"type":"text","text":"gravity=top\nmode=none","fill":"black","gravity":"center"}
]
},
{
"type": "column",
"margin": 10,
"children": [
{"type":"image","file":"example-image-large.jpeg","gravity":"center"},
{"type":"text","text":"gravity=center\nmode=none","fill":"black","gravity":"center"}
]
},
{
"type": "column",
"margin": 10,
"children": [
{"type":"image","file":"example-image-large.jpeg","gravity":"bottom"},
{"type":"text","text":"gravity=bottom\nmode=none","fill":"black","gravity":"center"}
]
}
]
},
{
"type": "row",
"children": [
{
"type": "column",
"margin": 10,
"children": [
{"type":"image","file":"example-image-small.jpeg","mode":"fit","gravity":"left"},
{"type":"text","text":"gravity=left\nmode=fit","fill":"black","gravity":"center"}
]
},
{
"type": "column",
"margin": 10,
"children": [
{"type":"image","file":"example-image-small.jpeg","mode":"fit","gravity":"center"},
{"type":"text","text":"gravity=center\nmode=fit","fill":"black","gravity":"center"}
]
},
{
"type": "column",
"margin": 10,
"children": [
{"type":"image","file":"example-image-small.jpeg","mode":"fit","gravity":"right"},
{"type":"text","text":"gravity=right\nmode=fit","fill":"black","gravity":"center"}
]
}
]
},
{
"type": "row",
"children": [
{
"type": "column",
"margin": 10,
"children": [
{"type":"image","file":"example-image-large.jpeg","mode":"fill","gravity":"top"},
{"type":"text","text":"gravity=top\nmode=fill","fill":"black","gravity":"center"}
]
},
{
"type": "column",
"margin": 10,
"children": [
{"type":"image","file":"example-image-large.jpeg","mode":"fill","gravity":"center"},
{"type":"text","text":"gravity=center\nmode=fill","fill":"black","gravity":"center"}
]
},
{
"type": "column",
"margin": 10,
"children": [
{"type":"image","file":"example-image-large.jpeg","mode":"fill","gravity":"bottom"},
{"type":"text","text":"gravity=bottom\nmode=fill","fill":"black","gravity":"center"}
]
}
]
}
]
}

llms.txt