Найти круг и указать вдоль круга? - PullRequest
2 голосов
/ 31 января 2012

У меня есть следующее изображение поверх изображения, которое точно 424x318

my image

И это завернуто в div, который 444x338.

И у меня есть «инструмент обрезки» (центральная часть круга), который имеет размер 185x185, НО может изменить размер, чтобы быть минимум 50x50 и максимум около 300x300 (в зависимости от размещения).

Инструмент обрезки имеет верхнюю "рамку / поле" в 28 пикселей и левую "рамку / поле" в 20 пикселей (это измерения, которые занимают вкладки, а также фиолетовые линии и белые элементы. Однако его можно изменить в размере). , что увеличило бы границу / маржу на процент изменения размера (поэтому, если все это значение достигнет 1,5, масштаб будет * 1,5).

Инструмент для обрезки также имеет общий размер 185x185 ШхВ.

Стандартной позицией является центр (который равен 66x120).

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

// Get variables
$left = $val->pos['0']; // this is posted from jquery, using position();
$top = $val->pos['1']; // this is posted from jquery, using position();
$scale = $val->scale; // this is posted from jquery, using width/185

$img = $val->image; // background image
$h = $scale*185;


// CENTER OF THE CIRCLE
$c1 = ($h*.5)+$left-20;
$c2 = ($h*.5)+$top-10;

// LEFT SIDE
$c3 = $left+(20*$scale)-10;
$c4 = ($h*.5)+$top-10;

$scalesize = $c1.",".$c2." ".$c3.",".$c4;

// Crop Size WxH+X+Y
$cr1 = $h-(40*$scale)-17;
$cr2 = $h-(40*$scale)-14;

$cr3 = $left-(20*$scale)+28;
$cr4 = $top+(20*$scale)-3;

$cropsize = $cr1."x".$cr2."+".$cr3."+".$cr4;

Затем я передаю его на imagemagick, используя

$return = exec('convert -size 424x318 xc:none -fill 'filename' -draw "circle '.$scalesize.'" -crop '.$cropsize.' +repage '.newfilename);

Я просто не могу на всю жизнь понять, что я делаю неправильно. Я продолжаю играть с ##, которые я вычитаю в конце, и это в конечном итоге работает на один размер, но затем, когда я изменяю размер инструмента кадрирования, он все портит ... Любая помощь?

Ответы [ 2 ]

0 голосов
/ 31 января 2012

Если поле изменяется в соответствии со шкалой, вы должны соответствующим образом масштабировать свои константы.

Примерно так:

// CENTER OF THE CIRCLE
$c1 = ($h*.5)+$left-20 * scalesize;  // Apply scale to constant
$c2 = ($h*.5)+$top-10 * scalesize;  // Apply scale to constant
0 голосов
/ 31 января 2012

Попытайтесь сделать один шаг за раз:

  1. Убедитесь, что ваш инструмент обрезается в нужном месте (используйте это: Обрежьте или замаскируйте изображение в круг );
  2. Убедитесь, что изменение размера (только) работает нормально;
  3. Объедините эти две части.
...