Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 保持纵横比_Javascript_Css_Image_Aspect Ratio_Jcrop - Fatal编程技术网

Javascript 保持纵横比

Javascript 保持纵横比,javascript,css,image,aspect-ratio,jcrop,Javascript,Css,Image,Aspect Ratio,Jcrop,目前我正在开发一个图像裁剪工具,图像裁剪工具来自jCrop,我试图使用户从中获取的图像比原始上传的图像更小。基本上,如果上传一个横向图像,我需要使图像304px宽,而不改变快照的纵横比 例如,如果用户上传一张肖像照片,我需要在不改变照片纵横比的情况下制作237px的图像 这可能吗?我可以在我的代码中访问原始图像的大小,但我无法确定我是否没有改变纵横比?是的,如果源图像已经足够宽,这是可能的。如果图像不够宽,则没有足够的数据进行裁剪,如果希望保持纵横比,则需要在裁剪之前放大图像 像这样的事情应该让

目前我正在开发一个图像裁剪工具,图像裁剪工具来自jCrop,我试图使用户从中获取的图像比原始上传的图像更小。基本上,如果上传一个横向图像,我需要使图像304px宽,而不改变快照的纵横比

例如,如果用户上传一张肖像照片,我需要在不改变照片纵横比的情况下制作237px的图像


这可能吗?我可以在我的代码中访问原始图像的大小,但我无法确定我是否没有改变纵横比?

是的,如果源图像已经足够宽,这是可能的。如果图像不够宽,则没有足够的数据进行裁剪,如果希望保持纵横比,则需要在裁剪之前放大图像

像这样的事情应该让你开始:

CropWidth=237;
AspectRatio= SourceWidth/SourceHeight; 
CropHeight = CropWidth*AspectRatio;

要正确保持纵横比,应使用GCD:

function gcd(a, b) {
    return (b == 0) ? a : gcd(b, a % b);
}
然后,您应该执行以下操作:

function calcRatio(objectWidth, objectHeight) {
    var ratio = gcd(objectWidth, objectHeight),
        xRatio = objectWidth / ratio,
        yRatio = objectHeight / ratio;
    return  { "x": xRatio, "y": yRatio };
}
这将得到某个对象的比率。您可以使用此信息来计算结果图像的大小

function findSize (targetHeight, xRatio, yRatio) { 
    var widthCalc = Math.round((xRatio * targetHeight) / yRatio);
    return { "width" : widthCalc, "height" : targetHeight };
} 

var test = calcRatio(1280,720),
    dimensions = findSize(400, test.x, test.y); 
    //400 is what we want the new height of the image to be
这些是你的维度。如果你没有任何额外的“空间”在你的图像周围,你需要解释,那么你的工作就完成了。否则你需要处理几个案子