画像のビフォーアフター比較レイアウトを作成
UI コードで座標を推測せずに、ビフォーアフター画像の正確な比較レイアウトを作成できます。2 枚の画像のピクセル寸法を入力し、横並び表示またはスライダー式オーバーレイを選択すると、キャンバス、画像の長方形、クリップ領域、垂直境界線の位置が構造化データで返されます。信頼できる視覚比較には内容の位置合わせが必要なため、同じ寸法が前提です。元画像の寸法が異なる場合は、変更後の画像を変更前の寸法に合わせる指示を明示的に要求できます。
無料で実行
目的に合う比較形式を選択します
ビフォーアフター表示には、異なる 2 つの閲覧目的があります。画像を横並びにする比較レイアウトでは、各画像の全体が常に表示されます。閲覧者がシーン全体を確認する場合、離れた場所を見比べる場合、または操作せずに結果を見る場合に適しています。返されるキャンバスは有効画像幅の 2 倍で、変更前のパネルが左、変更後のパネルが右に配置され、共有境界に垂直線が置かれます。一方、スライダー式オーバーレイでは、両方の画像が同じ座標空間に重なります。相互補完するクリップ長方形により、境界線の左側には変更前、右側には変更後の画像が表示されます。対応する特徴が境界線の移動中も同じ位置に残るため、小さな変化を見つけやすくなります。利用者とインターフェースに応じて形式を選び、返された長方形を CSS、SVG、Canvas、またはネイティブ描画レイヤーで直接使用してください。座標は整数ピクセルなので、後段で暗黙の配置規則を推測する必要はありません。
寸法の違いを明示的に扱います
正確な比較は、同じ寸法から始まります。片方が 1200 × 800 ピクセル、もう片方が 1000 × 800 ピクセルの場合、変換方法を指定せずに重ねると、対応する細部がずれて変化が誇張されたり隠れたりします。そのため、`resize_to_match` が有効でない限り、幅または高さが異なる入力は拒否されます。有効にすると変更前の画像が基準となり、結果には変更後の画像の目標寸法と、水平方向および垂直方向の個別の拡大率が含まれます。この明示的な方針により、描画側は必要な調整を正確に把握でき、不均一な引き伸ばしも検出できます。本ツール自体はサイズ変更や切り抜きを実行しません。縦横比の維持が重要な場合は、あらかじめ寸法が一致する画像を用意するか、画像処理工程で切り抜いてからレイアウトを要求してください。すでに寸法が一致している場合、サイズ調整オブジェクトは変更が不要であることだけを示します。これにより、不要な null フィールドを含めず、常に予測しやすい構造を維持できます。
境界線の出力を操作可能な画面にします
スライダー式オーバーレイでは、境界線の割合をゼロから百までで指定します。計算結果はキャンバス内の最も近いピクセルに変換され、幅の合計が常に画像全体の幅となる 2 つのクリップが返されます。ゼロパーセントでは変更前のクリップ幅がゼロになり、変更後の画像が全面表示されます。百パーセントでは逆になります。指定した割合は変更せずに返されるため、UI の状態、アクセシビリティ値、分析、レスポンシブなサイズ変更後の再計算にも利用できます。横並び形式では、全幅の 2 パネルによって境界が自然に決まり、入力したスライダー割合にかかわらず、結合キャンバスの中央に配置されます。返された向きと x 座標を使って、線、つまみ、またはキーボード操作対応のコントロールを配置してください。実運用のスライダーでは、支援技術に現在値を伝え、矢印キーに対応し、どちら側が変更前か変更後かを明示する必要があります。この機能はマークアップではなく幾何情報を返すため、同じ確定的な結果を Web コンポーネント、SNS 用画像、デザインシステムのプレビュー、モバイルアプリで利用できます。
活用例
改装の変化を記録します
位置を合わせた室内写真を、隣接する全体パネルまたは操作可能な表示スライダーとして配置します。
画像編集の成果を提示します
レタッチ、修復、カラーグレーディング、背景除去のプレビュー用に正確な重ね合わせ領域を作成します。
比較コンポーネントを標準化します
Web とモバイルの描画側に、同じキャンバス、長方形、調整計画、境界線の確定的な情報を渡します。
よくある質問
API リクエストの料金はいくらですか?
API リクエスト 1 回の料金は $0.002 です。このページのブラウザーツールは無料で利用できます。
画像の変更やアップロードは行われますか?
いいえ。寸法のみを受け取り、配置座標を返します。画像データの読み取り、転送、保存、描画は行いません。
2 枚の寸法が異なる場合はどうなりますか?
resize_to_match が true でない場合は、無効な入力としてエラーになります。有効な場合は、変更後の画像を変更前の寸法に合わせる方法が返されます。
スライダーの境界ピクセルはどう計算されますか?
画像の幅に指定割合を掛けて 100 で割り、最も近い整数ピクセルに丸めます。
境界線の割合は横並び形式にも影響しますか?
いいえ。同じ大きさの全体パネルを 2 つ表示するため、境界線は結合キャンバスの 50 パーセント位置に固定されます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/image/compare-before-after-layout \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"before_width":1200,"before_height":800,"after_width":1200,"after_height":800}'const res = await fetch("https://api.kit.forhosting.com/image/compare-before-after-layout", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"before_width": 1200,
"before_height": 800,
"after_width": 1200,
"after_height": 800
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/compare-before-after-layout",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"before_width": 1200,
"before_height": 800,
"after_width": 1200,
"after_height": 800
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/compare-before-after-layout", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"before_width":1200,"before_height":800,"after_width":1200,"after_height":800}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"before_width":1200,"before_height":800,"after_width":1200,"after_height":800}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/compare-before-after-layout", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"before_width": 1200,
"before_height": 800,
"after_width": 1200,
"after_height": 800
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.compare_before_after_layout",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |