画像に価格や日付の文字を直接書き込む
画像の指定した位置に文字を直接書き込むツールです。フォント・大きさ・色・位置を数値で指定でき、価格や商品名、撮影日などの読める情報を写真の上に加えられます。ロゴを重ねる透かしとは別に、文字そのものを入れたいときに使います。
オンラインで実行
アカウントでログインし、当社のサーバー上で実行します。無料ツールはブラウザ内で動作しますが、これは上記の料金がKIT残高から差し引かれます。
透かしとの違い
透かしはロゴなどの画像を重ねる機能ですが、この機能は文字そのものを写真に書き込みます。価格・日付・物件名など、読める情報を写真に残したい場合はこちらが向いています。同じ写真に透かしと文字入れの両方を組み合わせることもできます。
位置と見た目を細かく指定する
文字を置く位置、フォントの大きさ、文字色、背景の帯の有無を指定できます。白い文字に暗い帯を敷けば、明るい写真の上でも文字が読みやすくなります。同じ設定を複数の写真に適用すれば、そろった見た目の画像を作れます。
物件写真や店舗メニューでの使い方
不動産の物件写真に価格や間取りを書き込んだり、飲食店のメニュー写真に価格を加えたりする用途に向いています。写真そのものに情報が含まれるため、印刷したチラシやSNSでの共有先でも情報が欠けません。
対応形式と上限
JPG・PNG・WebPに対応し、1枚あたり15MB、1,200万画素まで処理できます。元の画像は変わらないため、文字の内容や位置を変えて何度でも作り直せます。
活用例
不動産の物件写真
株式会社山田商事は物件の外観写真に「賃料8万円」「駅徒歩5分」といった文字を直接書き込み、チラシとウェブの両方で同じ画像を使い回しています。
飲食店のメニュー写真
高橋恵子さんは季節メニューの写真に価格を書き込み、印刷せずにSNSへ投稿しています。写真だけで価格が伝わるため、説明文を別に用意する手間が減りました。
イベント告知の画像
合同会社みどりデザインはイベントの背景写真に日付と会場名を書き込み、SNS投稿とチラシの両方に同じ画像を使っています。
よくある質問
アップロードした画像はどこに保存されますか?
文字を書き込む処理の後、削除されます。サーバーに保存し続けることはありません。
日本語のフォントは使えますか?
はい。日本語を含む文字を指定でき、文字化けせずに書き込まれます。フォントの大きさと色は自由に指定できます。
文字が写真の色に埋もれて読みにくくなりませんか?
文字の背後に帯を敷く設定ができるため、明るい背景でも暗い背景でも文字を読みやすく保てます。元の画像は変わらないため、色や位置を変えて試し直せます。
使い方について日本語で相談できますか?
申し訳ありませんが、日本語でのサポートは行っておりません。サポートは英語またはスペイン語で、担当者が直接対応します。ツール自体は日本語で問題なくご利用いただけます。
料金体系はどうなっていますか?
1リクエストあたり$0.003(米ドル)に加え、画像1枚につき$0.005です。サブスクリプションはなく、処理した枚数分だけの料金になります。
同じ書式で多数の写真に文字を入れられますか?
ウェブでは1枚ずつ処理します。まとまった枚数に同じ書式で文字を入れたい場合は、APIから自動化できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/image/text-overlay \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image":"https://ejemplo.com/imagen.jpg"}'const res = await fetch("https://api.kit.forhosting.com/image/text-overlay", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image": "https://ejemplo.com/imagen.jpg"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/text-overlay",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image": "https://ejemplo.com/imagen.jpg"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/text-overlay", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image":"https://ejemplo.com/imagen.jpg"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image":"https://ejemplo.com/imagen.jpg"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/text-overlay", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"image": "https://ejemplo.com/imagen.jpg"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.text_overlay",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |