你可以自己做數學,我循環了一些樣本數據,但只是作爲一個演示。
<cfset dimlist="1000|800,1000|1000,800|1000,1000|200,500|1000,600|1000,230|40,400|300,300|500,499|200,500|199,499|199">
<cfloop list="#dimlist#" index="dims">
<Cfset dheight = listfirst(dims,"|")>
<cfset dwidth = listlast(dims,"|")>
<cfset hratio = dheight/500>
<cfset wratio = dwidth/200>
<cfif dwidth/hratio gte 200>
<cfset finalh = int(dheight/hratio)>
<cfset finalw = int(dwidth/hratio)>
<cfelse>
<cfset finalh = int(dheight/wratio)>
<cfset finalw = int(dwidth/wratio)>
</cfif>
<cfoutput> #dheight# x #dwidth# converts to #finalh# x #finalw#<br /></cfoutput>
</cfloop>
事實上,你可以把它變成一個功能很容易
<cfscript>
function CalcSz(numeric ih, numeric iw, numeric dh = 500, numeric dw = 200) {
var hratio = arguments.ih/arguments.dh;
var wratio = arguments.iw/arguments.dw;
if(arguments.iw/hratio > arguments.dw) {
var finalh = int(arguments.ih/hratio);
var finalw = int(arguments.iw/hratio);
} else {
var finalh = int(arguments.ih/wratio);
var finalw = int(arguments.iw/wratio);
}
return {height = finalh, width = finalw};
}
</cfscript>
<cfset dimlist="1000|800,1000|1000,800|1000,1000|200,500|1000,600|1000,230|40,400|300,300|500,499|200,500|199,499|199">
<cfloop list="#dimlist#" index="dims">
<Cfset dheight = listfirst(dims,"|")>
<cfset dwidth = listlast(dims,"|")>
<cfset dimstruct = CalcSz(dheight,dwidth)>
<cfoutput> #dheight# x #dwidth# converts to #dimstruct.height# x #dimstruct.width#<br /></cfoutput>
</cfloop>
這將返回一個包含.height和.WIDTH一個結構,你可以看到。正如你所看到的,它不存在轉換縮小規模,規模擴大或兩者非常接近(499或199)時的問題。
不用說,不要傳遞0作爲任何參數:)。
這絕對是非常棒的,效果非常好。我調整我的代碼使用ceiling()而不是int(),因爲我將圖像縮放到499px而不是500px。 –
@volumeone謝謝:)。感謝您嘗試編輯,你能給我一些轉換爲499的數字嗎?我想測試天花板是否可以作爲一個永久性修復程序。其他用戶拒絕了您的嘗試編輯,因爲通常您不允許更改作者的代碼。 Ceiling()使我的函數表現得稍微不同,所以他們拒絕了它。你的評論方法是正確的,讓我知道我可以改變的東西來改善它。 –