大きければ良いという概念が仮定されています。
bloggerで画像を貼り付ける時は小・中・大・特大・元のサイズっていう風に段階的にサイズを選べるのですが、ドールの画像を貼り付けるのに特大だと少し小さくて、元のサイズだと大きすぎてちょっとアレでした。
htmlを直接いじれば任意のサイズで画像を貼り付けられるので、元の画像の比を保ったまま、出来る限り大きくすることにしました。
比率は少数倍になるのですが、求める画像のサイズは整数で欲しかったので、出来る限り整数に近い値を選びました。
そんでもって無駄にコードが書きたくなったので無駄に計算資源を使って、1.2倍から1.5倍の間を0.00001刻みで計算していって、整数表現にした時との誤差が0.01に収まるような値を求めることになりました。
その時のコードが以下になります。
結果は
(hi, height, width)
(1.490630,954.0031999999999,635.00838)
(1.495320,957.0047999999999,637.00632)
ということになったので、どちらも1.49倍といっぱいいっぱいな感じですが、よりいっぱいいっぱいな感じがする1.495320を選びました。
ということで、このブログにドール画像を貼り付ける時の最適な縦横のサイズは957x637となりました。
めでたしめでたし。
比率は少数倍になるのですが、求める画像のサイズは整数で欲しかったので、出来る限り整数に近い値を選びました。
そんでもって無駄にコードが書きたくなったので無駄に計算資源を使って、1.2倍から1.5倍の間を0.00001刻みで計算していって、整数表現にした時との誤差が0.01に収まるような値を求めることになりました。
その時のコードが以下になります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import scala.math._ | |
import scala.language.implicitConversions | |
// BigDecimalとDoubleをアレする | |
implicit def bd2d(bd:BigDecimal):Double = bd.doubleValue | |
// heightとwidthをhiでびよ〜んってする | |
def biyoon(height: Int)(width: Int)(hi: BigDecimal) = { | |
(height * hi, width * hi) | |
} | |
// 元となる縦横の値を入れとく. | |
val blogImageSize = biyoon(640)(426) _ | |
// from - toまでstepで刻んだリスト | |
// doubleでそのままやったら小数点以下がキモくなったので安易にBigDecimalにした | |
def doubleList(from: BigDecimal, to: BigDecimal, step: BigDecimal) = { | |
def join(resp:List[BigDecimal]):List[BigDecimal] = { | |
val next = resp.last + step | |
if(next >= to) resp else join(resp :+ next) | |
} | |
join(List(from)) | |
} | |
println("(hi, height, width)") | |
doubleList(1.2, 1.5, 0.00001) | |
// びよ〜ん | |
.map( x => (x, blogImageSize(x))) | |
// widthとheightがerr内に収まっているヤツのみ抽出 | |
.filter{ case(hi, x) => | |
val err = 0.01 | |
val withinErrorMargin = (x: Double, err: Double) => math.abs(x - Math.floor(x)) < err | |
val withinRange = withinErrorMargin(_: Double, err) | |
withinRange(x._1) && withinRange(x._2) | |
} | |
// 読みやすいようにフラットにする | |
.map{case (x, (y, z)) => (x, y, z)} | |
.foreach(println) | |
/* | |
(hi, height, width) | |
(1.490630,954.0031999999999,635.00838) | |
(1.495320,957.0047999999999,637.00632) | |
*/ |
(hi, height, width)
(1.490630,954.0031999999999,635.00838)
(1.495320,957.0047999999999,637.00632)
ということになったので、どちらも1.49倍といっぱいいっぱいな感じですが、よりいっぱいいっぱいな感じがする1.495320を選びました。
ということで、このブログにドール画像を貼り付ける時の最適な縦横のサイズは957x637となりました。
めでたしめでたし。
0 件のコメント:
コメントを投稿