インスタのストーリーズやTikTok、リールなど、縦長の9:16画像を使う場面が増えました。ところがスマホの写真は4:3が基本なので、そのまま載せると上下に余白が出たり、勝手にトリミングされて顔が切れたりします。
この記事では、
- Pillowで写真を中央クロップして1080×1920にする短いスクリプト
- AIでアニメ目加工をするときに、元写真をどう撮るときれいに仕上がるか
をまとめます。後半は、セルフィーの片目を星やハートのアニメ目にする Anime Star Eyes(animeselfie.com) のようなAIフィルターを使う前提で書いていますが、ほかの顔加工系ツールにもだいたい当てはまる内容です。
9:16と1080×1920
縦型SNSの標準的なサイズは 1080×1920px(9:16) です。これより小さいと拡大されてぼやけ、比率が違うとアプリ側で切り取られます。最初から9:16に揃えておくのが一番確実です。
Pillowで中央クロップ+リサイズ
pip install Pillow だけで動きます。
from pathlib import Path
from PIL import Image, ImageOps
TARGET_W, TARGET_H = 1080, 1920 # 9:16
def to_vertical_916(src: str, dst: str, quality: int = 90) -> None:
img = Image.open(src)
img = ImageOps.exif_transpose(img) # スマホ写真の回転情報を反映
img = img.convert("RGB")
w, h = img.size
target_ratio = TARGET_W / TARGET_H
if w / h > target_ratio:
# 横に広い → 左右を削る
new_w = int(h * target_ratio)
left = (w - new_w) // 2
box = (left, 0, left + new_w, h)
else:
# 縦に長い → 上下を削る
new_h = int(w / target_ratio)
top = (h - new_h) // 2
box = (0, top, w, top + new_h)
img = img.crop(box).resize((TARGET_W, TARGET_H), Image.LANCZOS)
ext = Path(dst).suffix.lower()
if ext in (".jpg", ".jpeg"):
img.save(dst, quality=quality, optimize=True)
elif ext == ".webp":
img.save(dst, quality=quality)
else:
img.save(dst, optimize=True)
print(f"{src} {w}x{h} -> {dst} {img.size[0]}x{img.size[1]}, "
f"{Path(dst).stat().st_size / 1024 / 1024:.2f} MB")
if __name__ == "__main__":
to_vertical_916("selfie.jpg", "selfie_916.jpg")
実行例(4032×3024の横長写真を入力した場合):
selfie.jpg 4032x3024 -> selfie_916.jpg 1080x1920, ...
ポイントは3つです。
-
ImageOps.exif_transpose:スマホ写真はEXIFの回転情報で縦横を表していることが多く、これを忘れると横倒しのままクロップされます。 - 比率で分岐:目標より横長なら左右を、縦長なら上下を削ります。どちらも中央基準です。
-
Image.LANCZOS:縮小時の画質が良いリサンプリングです。
中央クロップなので、顔が端に寄っている写真だと切れることがあります。その場合は撮影時に顔を中央に置くか、box の left / top を手動でずらしてください。
ファイル形式と容量
| 形式 | 向いている用途 | 注意点 |
|---|---|---|
| JPG | 写真全般。容量が小さい | 保存を繰り返すと劣化する |
| PNG | 劣化させたくない中間ファイル | 写真だと容量が大きくなりがち |
| WebP | 画質と容量のバランスが良い | 一部の古い環境で非対応 |
AIツールにアップロードする場合は、対応形式と容量上限を確認しておきましょう。たとえばanimeselfie.comはJPG/PNG/WebPで10MBまでです。最近のスマホのPNGはこれを超えることがあるので、迷ったら高品質(quality=90前後)のJPGで書き出すのが無難です。スクリプトの最後に容量を表示しているのはそのためです。
なお、AI側で9:16に出力してくれるツールなら、元写真を事前にクロップする必要はありません。ただ、顔周りの余白をコントロールしたいときには、自分で整えてから渡すと構図が安定します。
アニメ目セルフィーをきれいに仕上げる撮影Tips
片目だけをアニメ目に置き換えるタイプの加工は、AIが「目の位置と形」を正確に捉えられるかで仕上がりが大きく変わります。以下は顔のランドマーク検出が一般的に苦手とする条件を避けるための工夫です(特定サービスの内部処理を知っているわけではありません)。
ライティング
- 顔の正面からの柔らかい光が理想です。窓際で窓の方を向くと、自然光がきれいに入ります。
- 真上からの照明は目の周りに影が落ち、まぶたの輪郭が分かりにくくなります。
- 逆光は顔が暗くつぶれるので避けましょう。
- 目にキャッチライト(光の映り込み)が入っていると、加工後もいきいきとした印象になりやすいです。
角度
- ほぼ正面、または少しだけ斜めがおすすめです。横顔に近いと奥側の目が小さくなり、加工が不自然になりがちです。
- カメラは目線の高さか、やや上から。極端なあおりは避けます。
- 目はしっかり開けて、前髪やメガネのフレームが目にかからないようにします。前髪が瞳にかかっていると、アニメ目が髪の上に描かれたように見えることがあります。
解像度とピント
- ズームを使わず、メインカメラの等倍で撮ります。デジタルズームは解像度が落ちます。
- ピントは目に合わせます。スマホなら画面上の目をタップすればOKです。
- ビューティーフィルターや強いノイズ除去は、まつ毛やまぶたのディテールを消してしまうので、加工前はオフにしておくのが無難です。
- 顔が画面のある程度の大きさを占めるように撮ると、目の部分のピクセル数が増えて細部まできれいに出ます。
構図
- 9:16で使う前提なら、縦向きで撮り、顔を中央より少し上に置くと、ストーリーズのUIと重なりにくくなります。
- 背景はシンプルなほうが、アニメ風のステッカーなどが乗ったときにごちゃつきません。
Anime Star Eyesについて簡単に
参考までに、記事中で例に挙げたサービスの概要です(公式サイトの記載による)。
- 大人のセルフィー1枚から、片目を星・ハート・白黒マンガ風のアニメ目に置き換え
- 髪型や服装をもとにしたオリジナルキャラ「アニメツイン」のステッカー付き
- 出力は2K・9:16、透かしなし、アップロードはデフォルト非公開
- 18歳以上向け、有料のクレジット制(1枚3クレジット、月額9.99ドルから)
まとめ
- 縦型SNS用は1080×1920(9:16)に揃える。Pillowなら数十行で自動化できる
- EXIFの回転情報と、ファイル形式・容量上限に注意
- AI加工の元写真は「正面の柔らかい光・ほぼ正面の角度・目にピント・目にかかるものなし」が基本
元写真の質を少し上げるだけで、AI加工の仕上がりはかなり変わります。ぜひ試してみてください。