概要
いま運用中のウェブサイトの表示スピードを速くしたいために、画像のOptimizeをしようと思い立ったが、
cloneしてjpgminiとかでやるのはめんどうで気が引けるし、なんとかしてサーバー側でできないかと調べてみたところ、かの有名な TinyPNG 様がなんと Web API をご用意して下さっていたので、これを使います。
すでにqiitaに記事があるかなぁと思っていたんですが、なさそうなのでメモとして残しておきます。
1. API KEY を取得する
TinyPNGの Developpers ページに行くと、名前とメールアドレスを入れる欄があるので、そこにデータを入力します。するとメールがくるので、貼ってあるリンクをたどってAPI KEYを取得します。
2. クライアントを選ぶ
TinyPNGは REST API のほか、Ruby, php, node.js, python, java, .net これらの言語でAPIを使うための
クライアントがあります。自分が使うのはPythonなので、今回のこの記事はPythonで書きます。
Pythonの場合は、tinify
というクライアントがあるので、それをインストールします。
pip install tinify
こちらがAPI説明ページになってます。 https://tinypng.com/developers/reference/python
3. コードを書く
このクライアントを使うと、 たった2行 でOptimizeできちゃいます。
source = tinify.from_file("unoptimized.jpg")
source.to_file("optimized.jpg")
これだけ。 Simple is The BEST って感じでとてもいいですね。
ちなみにこの前にクライアントのimportとAPIキーの登録があります。
import tinify
tinify.key = "Your API KEY"
3.1. サンプルコード
ためしに、現在のディレクトリにある jpg
or png
ファイルをoptimizeするコードを書いてみました(py2.7
)
#!/usr/bin/env python
# coding: utf-8
import os
import sys
import tinify
TARGET_DIR = "."
tinify.key = "###################################"
def get_images():
result = []
files = os.listdir(".")
for file in files:
if file.endswith(".jpg") or file.endswith(".png"):
result.append(file)
return result
def optimize(source, dest, target_dir):
dest_path = os.path.join(target_dir, dest)
if os.access(source, os.F_OK) != True:
raise IOError("file not found: {}".format(source))
optimizer = tinify.from_file(source)
optimizer.to_file(dest_path)
return
if __name__ == "__main__":
images = get_images()
# test optimize
optimize(images[0], images[0], TARGET_DIR)
4. 注意事項
TinyPNGでは、無料ではひと月にアップロードできる画像は 500 個だけのようですので、そこは注意が必要です。