LoginSignup
6
7

More than 5 years have passed since last update.

TinyPNGのWeb APIを使ってサーバーサイドでImage Optimize

Last updated at Posted at 2016-07-14

概要

いま運用中のウェブサイトの表示スピードを速くしたいために、画像の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 個だけのようですので、そこは注意が必要です。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7