Skip to main content

画像ファイルサイズ変更(Mac)

概要

  • Mac コマンドで → sip
  • Python ライブラリで → Pillow

画像リサイズ (Macで)

縦横比キープで幅だけ縮める

bash
sips --resampleWidth 300 変更前.jpg --out 変更後.jpg

今のサイズ確認

bash
sips -g all a.jpg
sips -g pixelWidth -g pixelHeight a.jpg

撮影時刻?

bash
sips -g creation a.jpg

真ん中あたりで切り抜く

ImageMagick (convertコマンド) を使う (brew install ImageMagick)

bash
convert 変更前.jpg -crop '2048x1536+344+0' 変更後.jpg 
  • Width, Height, OffsetX, OffsetY の順
  • 例は、縦横比を変えようとして、高さは変えず横幅を狭めるが、真ん中に寄せたいので、X 方向にオフセットした

Python でのメモ

bash
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade Pillow
py
#!/usr/bin/env python3

import os
import sys
import math
from PIL import Image

def get_new_fname(fname):
(f, e) = os.path.splitext(fname)
return f + '.new' + e

base_w = 4
base_h = 3

fname_org = sys.argv[1]
img = Image.open(fname_org)

fname_new = get_new_fname(fname_org)
print(fname_new)

(w, h) = img.size
gcd = math.gcd(h, w)

print('%d : %d' % (w, h))
print('%d : %d' % (w / gcd, h / gcd))

if (w / gcd) == base_w and (h / gcd) == base_h:
print('%d : %d is ok' % (base_w, base_h))
sys.exit()

if base_w < base_h or w < h:
print('w < h not supported')
sys.exit()

print('resize')

# この辺、4:3 でなかったら端数でそうではあるけど
expected_h = int(h - (h % base_h))
expected_w = int(expected_h * base_w / base_h)
start_x = int((w - expected_w) / 2)
start_y = 0
end_x = start_x + expected_w
end_y = expected_h

size = (start_x, start_y, end_x, end_y)
print(size)
img.crop(size).save(fname_new)