# Image 워터마크 삽입



이미지 위에 지정한 글자를 반복 무늬로 새긴 PNG 이미지를 돌려줍니다. 응답은 JSON이 아닌 이미지 파일입니다.



인증: Authorization: Bearer $APICK_API_KEY

본문 있는 REST 요청: multipart/form-data. GET 본문 및 MCP JSON-RPC 규격은 해당 명세를 따릅니다.

인증키는 서버에 보관하세요. 모든 예제는 정적 자료입니다.



## POST /rest/draw_watermark_image 응답 필드

## API 요청: POST /rest/draw_watermark_image



### 입력

- `image` (file, 필수): 분석할 이미지 파일입니다. JPG·PNG·WEBP를 지원하며, 파일 크기·해상도 제한은 요청 표를 확인하세요.

- `wm` (string, 필수): 이미지에 반복 삽입할 워터마크 문구입니다. 최대 30자이며, 한글·영문·숫자를 지원합니다. 너무 길면 잘리거나 밀집도가 낮아집니다.

- `font_size` (integer, 선택): 워터마크 글자의 크기입니다. 10~100 범위이며, 생략하면 10입니다. 값이 클수록 문구가 굵고 선명해집니다.

- `color` (string, 선택): 워터마크 색상 HEX (000000 ~ FFFFFF, 기본값 EEEEEE)

- `opacity` (number, 선택): 워터마크의 불투명도입니다. 0은 완전 투명, 1은 완전 불투명이며, 생략하면 0.5입니다. 원본을 가리지 않으려면 0.2~0.4를 권장합니다.

- `density` (integer, 선택): 가로·세로로 반복되는 워터마크의 간격 계수입니다. 5~15 범위이며, 값이 작을수록 촘촘하게 반복됩니다.



### 응답 명세

```json

{
  "type": "string",
  "format": "binary"
}

```

### curl

```curl

curl --fail-with-body --request POST 'https://apick.app/rest/draw_watermark_image' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form 'image=@./product.jpg' \
  --form-string 'wm=SAMPLE' \
  --form-string 'font_size=10' \
  --form-string 'color=EEEEEE' \
  --form-string 'opacity=0.5' \
  --form-string 'density=10' \
  --dump-header response.headers --output result.png
# response.headers의 Content-Type을 확인한 뒤 파일을 사용하세요.

```

### Node.js (서버 ESM)

```javascript

import { readFile } from "node:fs/promises";
const form = new FormData();
form.append("image", new Blob([await readFile("./product.jpg")]), "product.jpg");
form.append("wm", "SAMPLE");
form.append("font_size", "10");
form.append("color", "EEEEEE");
form.append("opacity", "0.5");
form.append("density", "10");
const response = await fetch("https://apick.app/rest/draw_watermark_image", {
  method: "POST",
  headers: { Authorization: "Bearer " + process.env.APICK_API_KEY },
  body: form,
  signal: AbortSignal.timeout(120_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
if ((response.headers.get("content-type") || "").includes("json")) {
  throw new Error(JSON.stringify(await response.json()));
}
const { writeFile } = await import("node:fs/promises");
await writeFile("result.png", new Uint8Array(await response.arrayBuffer()));

```

### python

```python

import os
import requests
parts = [
    ("image", ("product.jpg", open("./product.jpg", "rb"))),
    ("wm", (None, "SAMPLE")),
    ("font_size", (None, "10")),
    ("color", (None, "EEEEEE")),
    ("opacity", (None, "0.5")),
    ("density", (None, "10")),
]
response = requests.request("POST", "https://apick.app/rest/draw_watermark_image",
    headers={"Authorization": "Bearer " + os.environ["APICK_API_KEY"]},
    files=parts,
    timeout=(10, 120), stream=True)
response.raise_for_status()
if "json" in response.headers.get("Content-Type", ""):
    raise RuntimeError(response.json())
with open("result.png", "wb") as output:
    for chunk in response.iter_content(65536):
        output.write(chunk)

```

### php

```php

<?php
$headers = ["Authorization: Bearer " . getenv("APICK_API_KEY")];
$form = [
    'image' => new CURLFile('./product.jpg'),
    'wm' => 'SAMPLE',
    'font_size' => '10',
    'color' => 'EEEEEE',
    'opacity' => '0.5',
    'density' => '10',
];
$curl = curl_init('https://apick.app/rest/draw_watermark_image');
curl_setopt_array($curl, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_POSTFIELDS => $form,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => 120,
]);
$body = curl_exec($curl);
if ($body === false) { throw new RuntimeException(curl_error($curl)); }
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$type = curl_getinfo($curl, CURLINFO_CONTENT_TYPE) ?: "";
curl_close($curl);
if ($status >= 400) { throw new RuntimeException($body); }
if (strpos($type, "json") !== false) { throw new RuntimeException($body); }
file_put_contents('result.png', $body);

```

## 사용 예시 1. 상품 사진에 SAMPLE 표시

기본값을 그대로 함께 보내 옅은 회색 글자를 넣습니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/draw_watermark_image' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form 'image=@./product.jpg' \
  --form-string 'wm=SAMPLE' \
  --form-string 'font_size=10' \
  --form-string 'color=EEEEEE' \
  --form-string 'opacity=0.5' \
  --form-string 'density=10' \
  --dump-header response.headers --output result.png
# response.headers의 Content-Type을 확인한 뒤 파일을 사용하세요.

```

- 본문은 항상 PNG입니다. `output.png`로 저장하세요.

## 사용 예시 2. 사본 이미지에 제출용 표시

사본이 다른 곳에 쓰이지 않도록 진하고 큰 글자로 넣습니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/draw_watermark_image' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form 'image=@./copy.jpg' \
  --form-string 'wm=제출용' \
  --form-string 'font_size=40' \
  --form-string 'color=000000' \
  --form-string 'opacity=0.3' \
  --form-string 'density=8' \
  --dump-header response.headers --output result.png
# response.headers의 Content-Type을 확인한 뒤 파일을 사용하세요.

```

- `font_size`는 10~100, `density`는 5~15, `opacity`는 0~1 범위입니다.

- `wm`은 30자 이하로 보내세요.

## 코드·오류

## 상세 기능·요금

업로드 용량 제한: 50MB multipart/form-data 요청에 포함된 첨부 이미지 합계는 최대 50MB입니다. 제한을 초과하면 HTTP 413과 REQUEST_TOO_LARGE 오류가 반환되며 과금되지 않습니다. 이용 전 확인 상품 사진·시안·신분증 사본처럼 다른 용도로 쓰이면 안 되는 이미지에 "SAMPLE", "제출용" 같은 표시를 넣을 때 사용합니다. PNG·JPEG·WEBP·BMP 이미지를 받으며 결과는 항상 PNG입니다. 선택 항목도 함께 보내는 것을 권장합니다. 아래 표의 기본값을 그대로 넣으면 생략했을 때와 같은 결과를 얻습니다. 성공한 건당 10P입니다. 실패 응답은 과금되지 않습니다.

## 상세 요청

항목설정 메서드·주소POST https://apick.app/rest/draw_watermark_image 인증 헤더Authorization: Bearer 내 계정의 API 인증키 본문 형식multipart/form-data 요청 예시 form-data 전체 예제 보기

## 상세 응답

성공하면 워터마크가 들어간 PNG 본문이 바로 옵니다. 내려받기 파일명은 output.png입니다. 응답 헤더 필드타입설명 successinteger1이면 처리에 성공한 것입니다. costinteger이번 요청에서 차감된 포인트입니다. msinteger처리 시간(밀리초)입니다. Content-Typestringimage/png

## 상세 코드·정책

오류와 대처 실패하면 이미지 대신 JSON이 옵니다. HTTP 상태와 Content-Type을 먼저 확인하고, JSON이면 data.error 문구를 기록하세요. 실패 응답의 api.cost는 0입니다. HTTPdata.error대처 400필수 입력값이 없습니다.wm에 글자를 넣으세요. 400마킹 문자는 최대 30자까지 허용됩니다.wm을 30자 이하로 줄이세요. 424opacity·font_size·density 값은 … 값만 허용됩니다.문구에 나온 항목을 위 표의 범위 안으로 고치세요. 400파일 유형이 맞지 않습니다. 이미지 형식의 파일만 허용됩니다.이미지 파일인지 확인하세요. 424첨부파일이 없습니다.파일 필드 이름을 image로 보냈는지 확인하세요. 424알 수 없는 이유로 실패했습니다.이미지를 PNG 또는 JPEG로 다시 저장해 한 번 더 요청하세요.

## 상세 예제

결과 예시 [이미지] 호출 예시 같은 요청을 JavaScript와 Python으로 옮긴 예시입니다. 키는 환경변수 APICK_API_KEY 에서 읽습니다. JavaScript 예시 form-data 전체 예제 보기 Python 예시 form-data 전체 예제 보기
