Как вычислить дельту X, Y при выравнивании вектора с тенями, чтобы он отображался в той же позиции? - PullRequest
1 голос
/ 08 апреля 2019

Я сглаживаю вектор из инструмента дизайна (Sketch) в PNG. Вектор может иметь тень:

enter image description here

В этом случае X и Y перед выравниванием равны 100x100, а ширина и высота перед выравниванием тоже равны 100x100.

Из соображений автоматизации я автоматически выполняю этот вектор для выравнивания PNG в фоновом режиме (это CLI, работающий на сервере). Затем инструмент дает мне новые ширину и высоту PNG, но в отличие от изображения ниже, новые или дельта X и Y неизвестны:

enter image description here

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

Вот почему новые X и Y имеют размер 29x44 (ширина и высота 233x244).

Вопрос заключается в том, как вычислить новые или дельта X и Y на основе свойств исходного вектора (в том числе теневых опор x, y, размытия, растяжения) и / или ширины / высоты нового сглаженного изображения (которые известны). .

Резюме

Мне нужно вычислить дельту X и Y таким образом, чтобы положение визуализированного изображения было таким же, как и до того, как его кадр был изменен в размере, чтобы включить тень в его сплющенной форме.

Возьмите этот контрольный пример:

до выравнивания

frame x = 100
frame y = 100
frame width = 100
frame height = 100
shadow x = 0
shadow y = 20
shadow blur = 80
shadow spread = 0

после выравнивания:

frame x = 29 (*) 
frame y = 44 (*)
frame width = 233
frame height = 244

У меня есть все вышеперечисленные значения, КРОМЕ после выравнивания кадров x и y (отмечены *). Как мне разработать формулу, которая вычисляет эту дельту X, Y из свойств рамки и тени вектора и / или ширины / высоты кадра нового PNG?

...