Нарисовать многоугольник, выходящий за границу изображенияPhp

Кемеровские программисты php общаются здесь
Anonymous
Нарисовать многоугольник, выходящий за границу изображения

Сообщение Anonymous »

Примечание:
  • Этот вопрос касается только библиотеки 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 (приблизительное соотношение правой части изображения без красной полосы) и затем нарисуйте многоугольник (расширяя) за пределами изображения, чтобы получить окончательное изображение с тем же соотношением сторон 2:1, как показано ниже.
Изображение


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

Подробнее здесь: https://stackoverflow.com/questions/633 ... age-border

Вернуться в «Php»