teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

補足

2018/04/13 06:42

投稿

kazto
kazto

スコア7196

answer CHANGED
@@ -1,3 +1,28 @@
1
1
  Jpegは(圧縮時の設定にもよりますが)おおむね8x8の塊で画像を圧縮していきますので、画像部分については、`((幅+7)/8)*8 * ((高+7)/8)*8 * チャンネル数`で収まるんじゃないかと思います。
2
2
 
3
- ヘッダについては、これも圧縮時によって変わりますので、一概には決められません。
3
+ ヘッダについては、これも圧縮時によって変わりますので、一概には決められません。
4
+
5
+ ---
6
+ 追記:式の意味について
7
+
8
+ 画像が納まり、かつ8で割り切れる数を求めたい場合を、最小のケースを例に考えます。
9
+ 1x1の画像があったとします。これがおさまり、かつ、8で割り切れる数は、幅高ともに8です。
10
+
11
+ これを求めるために、上記の計算式を用います。
12
+ まず(幅+7)=1+7=8ですね。この数自体に意味はありません。
13
+ 次に、割る8ですが、整数で考えます。整数の割り算は余りを切り捨てます。
14
+ (1+7)/8 = 8/8 = 1 です。8ピクセルの最小単位の個数になります。
15
+ 最後に掛ける8です。ピクセル単位に戻してやります。
16
+ ((1+7)/8)*8 = 8、で、答えが求まりました。
17
+
18
+ 仮に8x8の画像であった場合も、収まりつつ8で割り切れる数は8です。
19
+ (8+7) = 15、(8+7)/8 = 1 です。小数点以下は切り捨てです。
20
+ ((8+7)/8)*8 = 8です。
21
+
22
+ これが9x9になったらどうでしょう。8x8の最小単位では収まりきらないので、16x16になることは予想できますね。
23
+ 先ほどの計算式に当てはめてみましょう。
24
+ (9+7) = 16、(9+7)/8 = 2、((9+7)/8)*8 = 16です。
25
+
26
+ 最初に7を足しこむことで、8で割り切れる天井の値を手に入れることができます。
27
+
28
+ ~~うーん、伝わるかなぁ。。。~~