画像透かしの位置・倍率・境界枠を計算
この計算ツールは、画素を変更する前に画像透かしの正確な配置を求めます。元画像と透かし画像の寸法、倍率、9種類のアンカー位置のいずれかをご指定ください。左、上、右、下の座標と、配置後の幅および高さを返します。任意の比例縮小を有効にすると、大きすぎる透かしも縦横比を保ったまま元画像内に収められます。
無料で実行
両方の画像を同じ座標系で指定します
最初に元画像の幅と高さを入力し、次に透かし画像の本来の幅と高さをご指定ください。通常はピクセルを使いますが、すべての値で統一されていれば、任意の正の単位をご利用いただけます。倍率は幅と高さの両方に同じように適用されるため、縦横比は維持されます。倍率0.5では各寸法が半分になり、2では両方が2倍になります。欠落した値、ゼロ、負数、数値でない値、無限大は有効な長方形を定義できないため受け付けません。本ツールは画像ファイルを読み取ったり変更したりせず、透明な余白内の可視部分を推測せず、回転も扱いません。各画像のキャンバス全体の寸法をお使いください。返される幅と高さには、元ファイルに含まれる透明画素も含まれます。
アンカーを選び、境界枠を確認します
配置位置は、四隅、各辺の中央、画像の完全な中央という9種類から選択します。原点は一般的なラスター画像座標と同じ左上にあり、xは右方向、yは下方向に増加します。左上の透かしはxとyがともにゼロから始まり、右下の透かしは元画像の幅と高さの位置で終わります。中央揃えでは残りの空間を均等に分けるため、小数の座標になる場合があります。応答のxとyは左上隅、widthとheightは配置後の大きさ、rightとbottomは反対側の辺を示します。これらを組み合わせた境界枠は、多くの画像ライブラリでそのまま利用できます。余白は自動では追加されません。端から離す必要がある場合は、計算後に座標を調整するか、あらかじめ想定する長方形を広げてください。
大きすぎる透かしを明示的に処理します
倍率は配置計算より先に評価されます。拡大または縮小後の透かしが元画像の幅か高さを超える場合、既定では意図しない切り抜きを避けるため入力エラーになります。自動的に収める場合はscale_downを有効にしてください。幅の比率と高さの比率のうち小さい方を選び、その追加縮小率を両方の寸法へ均等に適用するため、必ず画像内に収まります。この設定によって透かしが拡大されることはなく、指定サイズが大きすぎる場合にのみ働きます。応答には最終的な倍率とscaled_downフラグが含まれるため、サイズ変更の有無を処理側で記録できます。同じ規則を横長、縦長、サムネイルへ適用しても変形しません。計算は決定的で、アップロードや通信を行わず、自動化したAPIリクエスト1回の料金は$0.002です。
活用例
重ね合わせ命令を準備します
ロゴと元画像を画像処理ライブラリへ渡す前に、正確な座標と配置寸法を計算できます。
レスポンシブ規則を検証します
ファイルを変更せず、デスクトップ、モバイル、縦長、サムネイルで同じ倍率とアンカーを試せます。
意図しない切り抜きを防ぎます
本番処理で重ねる前に、大きすぎる透かしを拒否するか、比例縮小して収められます。
よくある質問
この機能は画像を変更しますか?
いいえ。配置形状だけを計算し、別のレンダラーや画像ライブラリで使える境界枠を返します。
座標の原点はどこですか?
元画像の左上です。xは右方向へ、yは下方向へ増加します。
倍率を変えても縦横比は保たれますか?
はい。任意の比例調整を含め、両方の寸法へ同じ倍率を適用します。
透かしが大きすぎる場合はどうなりますか?
既定ではリクエストが失敗します。scale_downを有効にすると、収まるまで比例縮小します。
配置に余白は含まれますか?
いいえ。アンカーは該当する辺に接するか、長方形を正確に中央へ置きます。必要な余白は後から加えてください。
APIリクエストの料金はいくらですか?
1回あたり$0.002です。同じ決定的な計算をブラウザーでは無料で実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/image/watermark-image \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"base_width":1200,"base_height":800,"watermark_width":300,"watermark_height":120}'const res = await fetch("https://api.kit.forhosting.com/image/watermark-image", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"base_width": 1200,
"base_height": 800,
"watermark_width": 300,
"watermark_height": 120
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/watermark-image",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"base_width": 1200,
"base_height": 800,
"watermark_width": 300,
"watermark_height": 120
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/watermark-image", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"base_width":1200,"base_height":800,"watermark_width":300,"watermark_height":120}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"base_width":1200,"base_height":800,"watermark_width":300,"watermark_height":120}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/watermark-image", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"base_width": 1200,
"base_height": 800,
"watermark_width": 300,
"watermark_height": 120
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.watermark_image",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |