コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

画像の圧縮!

画像を圧縮したい

はい、おはようございます。最近ブログにぺたぺた画像を貼り付けまくっている僕です。はてなブログはフリー版だとその容量に制限がありましてあんまり大きいサイズの画像を貼っているとよろしくないのですよね……。あと大きすぎる画像は読み込みに時間かかるのでよろしくないとも言われております。

なので、今日は画像圧縮について人によっては役に立つかもしれない何かを書こうと思います。

こういったサイトがあるそうです
f:id:andron:20201227213914p:plain
使い方は画像を指定位置にドラッグアンドドロップするだけで高圧縮できます。
tinypng.com


おわり





はい。そういった使い方を書いてもサイト開いてこうすればできますよで終わってしまって面白くないので意味もなくAPI使います。

APIの登録に関してはこちらを参照ください。
TinyPNG – Developer API

ちゃんと登録できればAPIキー取得できます。
f:id:andron:20210307224331p:plain

ここからどうするか途方に暮れていたんですが丁度APIリファレンスが分かりやすくまとまっていたので僕があれこれ試す必要なくてよかった。
tinypng.com

上のリファレンス見ながら適当にスクリプトを作ります。
アップロード用

# upload.sh
# 指定したjpgファイルを読み込みアップロードする
# 結果はresult.jsonに返す
APIKEY=APIキー
echo -n "FILE NAME: "
read FILENAME
curl https://api.tinify.com/shrink \
     --user api:$APIKEY \
     --data-binary @$FILENAME.jpg \
     > result.json

ダウンロード用

# download.sh
# アップロードしたresult.jsonにあるjpgファイルをダウンロードする
# ダウンロード後のファイル名はmin.jpg
APIKEY=APIキー
URL=`cat result.json | jq .output | jq .url | sed 's/"//g'`

curl $URL \
      --user api:$APIKEY \
      --output min.jpg

アップロードとダウンロード分けたけども一緒にしたい場合は適当に変数つくってつなげれば一括で処理できるかと思います。あとコメント書いた通り即席で作ったコードなのでかゆいところに届きません。その辺りはご利用状況に応じてカスタマイズしてやってください。

これでこんな感じに画像圧縮確認できました。すげー圧縮された……。
f:id:andron:20210307223951p:plain

これで快適なブログ生活ができる準備ができました。やったね!まあ、ブログに画像あげるだけだったらAPI使う必要ないけどね……。


余談

シェルでJSONいじるのに何使えばいいかなと思って最終的にjqとかいう謎のコマンド使ってるんだけどもそれについてはこっちを見てほしい。
JQなるもの - コミュ障だから明日が僕らをよんだって返事もろくにしなかった