Мне тяжело понять, что именно делает эта функция и почему она это делает. Функция взята из JCrop, который является довольно стандартным плагином для обрезки jQuery. Эта функция отвечает за вычисление того, как показать небольшое изображение предварительного просмотра рядом с изображением, которое вы собираетесь обрезать. Вы делаете выбор на своем изображении, и предварительный просмотр показывает .. хорошо .. предварительный просмотр.
Вот функция со страницы примера JCrop:
function showPreview(coords)
{
var rx = 100 / coords.w;
var ry = 100 / coords.h;
$('#preview').css({
width: Math.round(rx * 500) + 'px',
height: Math.round(ry * 370) + 'px',
marginLeft: '-' + Math.round(rx * coords.x) + 'px',
marginTop: '-' + Math.round(ry * coords.y) + 'px'
});
}
Также может быть важно отметить, что экземпляр JCrop имеет параметр, в котором соотношение сторон установлено равным 1, preview
div имеет ширину 100px и высоту 100px.
Вот ссылка, если вы хотите увидеть код и даже попробовать его.
http://deepliquid.com/projects/Jcrop/demos.php?demo=thumbnail
Я не понимаю многих из чисел .. RX * 500? Зачем? ry * 370? Зачем? Сверху вниз пробежка по этой логике будет высоко ценится.
Эти параметры 500 и 370 являются точной высотой изображения, которое обрезается. Один в демо имеет ширину 500 пикселей и высоту 370 пикселей.
На превью (справа) также показана вся картинка. Когда вы меняете свой выбор, он обновляет параметры изображения. Вы рассчитываете, насколько велика область выбора
width: Math.round(rx * 500) + 'px',
height: Math.round(ry * 370) + 'px',
Чтобы установить высоту предварительного просмотра. И также рассчитайте, как далеко вы находитесь от левой стороны и вершины, используя эти два:
marginLeft: '-' + Math.round(rx * coords.x) + 'px',
marginTop: '-' + Math.round(ry * coords.y) + 'px'
На самом деле он рассчитывает размер выбранной области и расстояние до нее слева и сверху, чтобы он мог отправить правильные параметры в область предварительного просмотра.
AspectRatio фактически показывает соотношение между шириной / высотой — поэтому, если вы обрезаете изображение 100×100, оно будет 100/100 = 1, однако, если вы обрезаете изображение 250×100, оно будет 250/100 = 2,5.
Других решений пока нет …