обработка изображений — PHP GD аффинно преобразует картинку и объединяет ее с фоном

Сейчас я занимаюсь разработкой редактора веб-изображений, я разрешаю пользователям создавать рисунки с помощью JavaScript, и мне нужно экспортировать результат в PHP. Я использую PHP-GD для генерации результатов.

Сейчас я работаю над аффинными преобразованиями. У пользователей есть рабочее пространство с заданными размерами. В iOS, Android и JavaScript они могут импортировать изображение и перемещать его, масштабировать и поворачивать в любом месте рабочей области, и позиция сохраняется в качестве матрицы преобразования. Теперь PHP должен использовать эту аффинную матрицу преобразования, чтобы расположить каждый элемент в нужном месте и экспортировать одно объединенное изображение.

Я посмотрел в Imagick для аффинных преобразований, но поскольку документация не завершена, и я не получил никаких результатов, я использую GD и почти достигаю своей цели.

Сейчас я уверен, что не правильно использую аффинное преобразование, вот где мне нужна ваша помощь.

Вот что я делаю:

$source = imagecreatefrompng($image_path_server);
$background = imagescale($source, 500);
$arrow = imagecreatefrompng($arrow_path);
$affine = array(0.08470355177709013, 0.7807062203430081, -0.7807062203430081, 0.08470355177709013, 42.99999999999994, 199.00000000000006);
$arrow = imageaffine($arrow, $affine);
imagecopy($background, $arrow, 42.99999999999994, 199.00000000000006, 0, 0, imagesx($arrow), imagesy($arrow));

С помощью этого кода стрелка хорошо поворачивается и масштабируется, но положение не является правильным, и это, вероятно, потому, что изображение переформировано после аффинного преобразования.

В идеале, я бы хотел избежать использования imagecopy для позиционирования изображения, так как позиция определяется в матрице, но я не нашел, как применить матрицу к стрелке на основе фона.

Ожидаемое поведение

Чтобы быть более точным, я хотел бы добавить свою стрелку в верхнем левом углу изображения в качестве слоя, а затем применить матрицу преобразования, чтобы она правильно позиционировалась на фоне. Когда я только применяю перевод ([1,0,0,1,200,250]), он не влияет на положение на заднем плане, и это именно то, что мне нужно здесь.

Кто-нибудь сталкивался с подобными операциями, чтобы направить меня в правильном направлении?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]