- Этот вопрос касается только библиотеки PHP GD.
- Этот вопрос НЕ о том, как обрезать изображение до целевого соотношения сторон, скорее речь идет о том, как нарисовать наложение, выходящее за пределы изображения.
Входные фоновые изображения имеют разные размеры и соотношения сторон, но окончательная графика должна быть фиксированной ( 2:1) соотношение сторон (оно также должно иметь заранее определенные размеры, но изменение размера изображения тривиально, поэтому моя единственная цель - правильное соотношение сторон).
В настоящее время я обрезаю входное изображение до целевого соотношения сторон (2:1), выполняя обрезку максимальной центральной области с помощью функции imagecrop. После этого я рисую на нем красный многоугольник, как показано ниже (игнорируйте текст, нарисованный на красной полосе), используя метод imagefilledpolygon [обрезка снимка экрана ниже предназначена только для демонстрационных целей, на самом деле это делается программно с помощью imagecrop функция]

Вот моя функция, которая рисует наложение (эта функция вызывается после обрезки изображения до соотношения сторон 2:1)
Код: Выделить всё
/**
* adds overlay (colored band) on the image
* for better output, overlay must be added before resizing
*/
public function withOverlay(): NotifAdsCreativeGenerator {
// Prepare custom red-color Hex to RGB https://stackoverflow.com/a/15202130/3679900
list($r, $g, $b) = sscanf(self::OVERLAY_COLOR, "#%02x%02x%02x");
$custom_red_color = imagecolorallocate($this->getCrrImage(), $r, $g, $b);
// prepare coordinates for polygon
$coords = [
[0, 0],
[(int) ($this->getCrrWidth() * self::OVERLAY_BEGIN_X_RATIO), 0],
[(int) ($this->getCrrWidth() * self::OVERLAY_END_X_RATIO), $this->getCrrHeight()],
[0, $this->getCrrHeight()]
];
$flattened_coords = array_merge(...$coords);
// draw polygon on image
imagefilledpolygon($this->getCrrImage(), $flattened_coords, count($flattened_coords) / 2, $custom_red_color);
return $this;
}

Я могу обрезать изображение до желаемого аспекта соотношение (1,28:1), но я не могу придумать, как нарисовать многоугольник за пределами изображения (эффективно расширяя изображение в процессе). Есть ли способ сделать это с помощью библиотеки PHP-GD?
Подробнее здесь: https://stackoverflow.com/questions/633 ... age-border