Javascript 计算图像比率并将值应用于查询字符串
我有下面的代码,它从裁剪器工具获取结果图像的尺寸,并基于高度/宽度分割的结果,生成一个用作图像纵横比的值。然后将此值插入查询字符串Javascript 计算图像比率并将值应用于查询字符串,javascript,jquery,Javascript,Jquery,我有下面的代码,它从裁剪器工具获取结果图像的尺寸,并基于高度/宽度分割的结果,生成一个用作图像纵横比的值。然后将此值插入查询字符串url:urlLocation+imageid.value+“/orientation/”+orientation+“/image/”+saveImage,。问题在于,查找图像比率的逻辑操作不正确,将所有裁剪的图像(无论是方形(高度=宽度)、纵向还是横向)视为“方形” $submitButton=$('') .text('Submit'+imageid.value).
url:urlLocation+imageid.value+“/orientation/”+orientation+“/image/”+saveImage,
。问题在于,查找图像比率的逻辑操作不正确,将所有裁剪的图像(无论是方形(高度=宽度)、纵向还是横向)视为“方形”
$submitButton=$('')
.text('Submit'+imageid.value).appendTo($(“.Submit well”))
.on('单击',函数(){
//var USERNAME=“bob”;
//var PASSWORD=“bobpass”;
var urlLocation=”http://www.url.com/rest/v1/cms/story/";
var saveImage=encodeURIComponent(dataUrl);
//如果必须手动选择方向,则使用此选项
//var-orientation=$(“#orientation”).val();
//
var resultHeight=$(“#result”).height();
var resultWidth=$(“#结果”).width();
var divide=resultHeight/resultWidth;
var精度=除以固定值(1);
如果(精度==1.77){
方向=“纵向”;
}
如果(精度==0.56){
方向=“景观”;
}
if(resultHeight==resultWidth){
方向=“方形”;
控制台日志(定向);
}
$.ajax({
方法:“放”,
数据类型:“jsonp”,
/*标题:{
“授权”:“基本”+btoa(用户名+:“+密码)
},*/
url:urlLocation+imageid.value+“/orientation/”+orientation+“/image/”+saveImage,
/*数据:{
imageid:imageid.value,
方向:方向,,
image:saveImage,
},*/
成功:功能(数据){
$(“.share link”).html(“Success!”+imageid.value+”已发布。”;
控制台日志(数据);
},
错误:函数(数据){
$(“.share link”).html(“无法发送照片:“+imageid.value+””;
}
});
});
您的代码包含大量对项目的引用,因此我无法真正测试它。然而,如果我要找到一个可能的原因,我会说这是在测试
精度
是否相等的行中
您可能还记得,黄金法则是永远不要比较两个浮点数是否相等。由于浮点存储在内存中的方式(以指数表示法),这可能会导致意外的结果。例如,此代码将返回
false
:
console.log(0.1 + 0.2 == 0.3)
问题是您首先使用.toFixed()
将浮点值(正确地)转换为字符串。但是,然后将结果字符串与浮点进行比较,这意味着JavaScript将把字符串重新转换为浮点,而两个浮点之间的比较是不可靠的
因此,将线路替换为:
var precision = divide.toFixed(2);
if (precision == '1.77') {
orientation = "PORTRAIT";
}
else if(precision == '0.56') {
orientation = "LANDSCAPE";
}
else if(resultHeight === resultWidth){
orientation = "SQUARE";
}
console.log(orientation);
(我还使用了else if
而不是更多的if
。此外,您可能希望处理方向为空的情况)
附言
我同意曼哈顿先生对你问题的评论。通常情况下,你不需要得到精确的纵横比。只需检查三种情况:
- 如果
,则是横向的width>height
- 否则,如果宽度<高度,则为纵向
- 否则它是正方形的(如果(宽度==高度),则无需检查
,因为如果它既不大于也不小于,则它必须相等)else
然而,如果我要找到一个可能的原因,我会说这是在测试
精度
是否相等的行中
您可能还记得,黄金法则是永远不要比较两个浮点数是否相等。由于浮点存储在内存中的方式(以指数表示法),这可能会导致意外的结果。例如,此代码将返回
false
:
console.log(0.1 + 0.2 == 0.3)
问题是您首先使用.toFixed()
将浮点值(正确地)转换为字符串。但是,然后将结果字符串与浮点进行比较,这意味着JavaScript将把字符串重新转换为浮点,而两个浮点之间的比较是不可靠的
因此,将线路替换为:
var precision = divide.toFixed(2);
if (precision == '1.77') {
orientation = "PORTRAIT";
}
else if(precision == '0.56') {
orientation = "LANDSCAPE";
}
else if(resultHeight === resultWidth){
orientation = "SQUARE";
}
console.log(orientation);
(我还使用了else if
而不是更多的if
。此外,您可能希望处理方向为空的情况)
附言
我同意曼哈顿先生对你问题的评论。通常情况下,你不需要得到精确的纵横比。只需检查三种情况:
- 如果
,则是横向的width>height
- 否则,如果宽度<高度,则为纵向
- 否则它是正方形的(如果(宽度==高度),则无需检查
,因为如果它既不大于也不小于,则它必须相等)else
然而,如果我要找到一个可能的原因,我会说这是在测试
精度
是否相等的行中
您可能还记得,黄金法则是永远不要比较两个浮点数是否相等。由于浮点存储在内存中的方式(以指数表示法),这可能会导致意外的结果。例如,此代码将返回
false
:
console.log(0.1 + 0.2 == 0.3)
问题是您首先使用.toFixed()
将浮点值(正确地)转换为字符串。然而,y