画像を指定ファイルサイズにリサイズする設定を推定
画像を指定ファイルサイズにリサイズするために必要な圧縮品質と縦横比を保った縮小率を推定します。元の幅と高さを入力し、JPEG、PNG、WebP、AVIFから形式を選び、10進表記のキロバイトで上限を指定してください。推奨寸法、品質、推定容量、現実的な最小値を返します。画像の画素ではなくメタデータだけを使うため、結果は計画用の目安であり、特定のエンコーダーや写真についての保証ではありません。同じ入力からは常に同じ結果が得られます。
無料で実行
容量制限から実用的な書き出し設定を求めます
画像本来の幅と高さ、目的の出力形式、送信先が許可する最大容量を入力してください。最初に、形式ごとの基準品質で通常どおり書き出した場合の容量を推定します。その時点で上限内なら、元の寸法を維持し、変更不要と判断します。JPEG、WebP、AVIFでは、画素数を減らす前にモデル上の品質を下げます。品質だけでは不足する場合、控えめな最低品質を維持しながら両辺を同じ比率で縮小します。PNGは可逆形式として扱うため、JPEGのような品質スライダーで容量を操作できるとは見なさず、縮小を提案します。結果には、推奨操作、整数の出力寸法、縮小率、品質、予想容量、元画像の予想容量、最小値が含まれます。まずこの設定でエンコードし、生成ファイルを実測してください。送信先が厳密なバイト上限を設けている場合は、その実測値を基にわずかに調整すると確実です。
推定で分かることと分からないことを確認します
寸法と形式だけから正確なファイル容量を求めることはできません。同じ幅、高さ、形式でも、単色のアイコン、ノイズの多い夜景写真、細部の多いイラストでは圧縮結果が大きく異なります。エンコーダーの実装、色差サブサンプリング、メタデータ、アニメーション、透明度、カラープロファイル、最適化設定も差を生みます。そのため、本計算では内容が明確な解析モデルを用います。形式ごとに、1画素当たりの典型的な圧縮バイト数、小さなコンテナ容量、基準品質を設定し、非可逆形式には連続的な品質曲線を適用します。信頼度は意図的に概算と表示されます。画像を調査、アップロード、デコード、変更することはなく、正確な容量を保証しません。実運用では、提案値で一度エンコードし、実際のバイト数を目標と比較してから、エンコーダー側の範囲を限定した探索で収束させてください。無作為な試行を避ける初期値として役立ちます。
小さすぎる目標には実用的な下限を適用します
どの画像でも任意に小さな容量へ変換できるわけではありません。空に近い画像ファイルでもヘッダーとコンテナ情報が必要で、大きな写真をほとんど見えないビットマップまで縮めることは、通常のリサイズとして実用的ではありません。そこで、元の縦横比を保ち、短辺を最低32ピクセルまで縮小し、形式ごとのモデル上の最低品質を適用した値を現実的な下限とします。指定容量がそれを下回る場合、計算した最小キロバイト値を示す入力エラーを返します。ゼロ寸法や負の計算結果、一般的なエンコーダーでは実現できない保証を返すより安全です。容量には10進キロバイトを使い、1 KBを1,000バイトとして扱います。寸法は正の整数に限られ、元画像の総画素数には上限があります。出力寸法は整数ピクセルへ切り下げ、推定値が目標内に収まるようにします。上限ちょうどで拒否するサイトでは安全余裕を確保してください。
活用例
厳格な投稿フォーム向けに準備します
固定されたKB上限を持つフォームへ画像を書き出す前に、実用的な品質と解像度を推定します。
レスポンシブ画像の容量予算を決めます
性能上の容量予算を、生成する各画像の概算寸法と圧縮設定へ変換します。
エンコーダー探索の初期値を作ります
圧縮処理に適切な開始品質と縮小率を与え、不要な試行エンコードを減らします。
よくある質問
エンコード後のファイルは推定容量と完全に一致しますか?
一致するとは限りません。画素内容とエンコーダー設定で圧縮率が変わるため、厳密な制限では実ファイルを測定してください。
PNGの品質が常に100になるのはなぜですか?
PNGは可逆形式としてモデル化しています。圧縮レベルは画質より処理時間に影響するため、縮小率を有効な提案として返します。
目標容量が小さすぎる場合はどうなりますか?
その寸法と形式に対する現実的な推定最小値を示し、入力エラーを返します。
画像はアップロードまたは解析されますか?
いいえ。受け取るのは寸法、形式、目標容量だけで、画像の画素を受信または処理することはありません。
APIリクエストの料金はいくらですか?
APIリクエスト1回の料金は$0.002です。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/image/resize-to-filesize \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"width":4000,"height":3000,"format":"jpeg","target_kb":500}'const res = await fetch("https://api.kit.forhosting.com/image/resize-to-filesize", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"width": 4000,
"height": 3000,
"format": "jpeg",
"target_kb": 500
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/resize-to-filesize",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"width": 4000,
"height": 3000,
"format": "jpeg",
"target_kb": 500
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/resize-to-filesize", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"width":4000,"height":3000,"format":"jpeg","target_kb":500}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"width":4000,"height":3000,"format":"jpeg","target_kb":500}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/resize-to-filesize", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"width": 4000,
"height": 3000,
"format": "jpeg",
"target_kb": 500
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.resize_to_filesize",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_mb | 15 |
max_megapixels | 12 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |