はじめに

アプリ開発中、画像のサイズを変更するということはよくあります。その時毎回デザイナーさんに頼み、新しい画像をもらってそれをアップロードするという流れは非常に時間が掛かります。

そんな時役に立つのが Cloudinary です。

Cloudinary とは

Cloudinary は、画像の保存や画像の加工を簡単に行えるクラウドサービスです。 指定する内容を埋め込んだ URL を使用すると、アップロードした画像をその指定した内容の通りに表示する事ができます。
もちろん、元の画像に影響は与えません。

例えば、元の画像がこれだとして

元画像

顔認識しリサイズという指定をすると、アバターに変身させることができます!

アバター

このようなことを簡単に行えるのが Cloudinary の良いところです。

事前準備

  • 無料アカウントを登録

公式: http://cloudinary.com/ サインインしたら、以下のような情報が分かります。

公式サイト

  • プロジェクトに Cloudinary のフレームワークを追加
参考: https://github.com/cloudinary/cloudinary_ios#setup

ちなみに、Swift から Objective-C の Cloudinary iOS SDK を呼び出すためには、ブリッジングヘッダを追加する必要があります。

実装

  • セットアップ
    二つの方法があります。
var cloudinary:CLCloudinary!

//一つ目の方法
cloudinary = CLCloudinary(url: "cloudinary://Your_API_Key:Your_API_Secret@Your_Cloud_Name")

//二つ目の方法
cloudinary = CLCloudinary()
cloudinary.config().setValue(Your_Cloud_Name, forKey: “cloud_name”)
cloudinary.config().setValue(Your_API_Key, forKey: “api_key”)
cloudinary.config().setValue(Your_API_Secret, forKey: “api_secret”)

  • 画像のアップロード
    func uploadToCloudinary(){
        guard let uploadimageData = UIImagePNGRepresentation(self.image) else {
           return
        }
        let uploader = CLUploader(cloudinary, delegate: self)
        let public_id = "sampleImage"
        uploader.upload(uploadimageData, options: ["public_id":fileId],
            withCompletion:onCloudinaryCompletion, andProgress:onCloudinaryProgress)
    }

アップロードに成功すると、返ってくるレスポンスの中にこのような項目が含まれています。

{
 …
“url”:”http://res.cloudinary.com/da6d5qvbf/image/upload/v1466406252/sampleImage.png”
“public_id”:”sampleImage”
…
}

public_id はアップロードするときに設定したもので、未設定の場合はランダムの文字列になります。 つまり、uploader.upload(uploadimageData, options:nil, withCompletion:onCloudinaryCompletion, andProgress:onCloudinaryProgress) で画像をアップロードすることもできます。

  • 画像の加工 今回はアバターのアイコンを作りたいので、顔を 90×90 のサムネイルにして円形に切り取るように指定してみます。
    func getAvatarIconUrl() -> String {
        let transform = CLTransformation()
        transform.width   = 90
        transform.height  = 90
        transform.crop    = "thumb"
        transform.radius  = "max"
        transform.gravity = "face" //顔認識

    //ここではレスポンスの public_id の文字列を使用
        let source      =  "sampleImage.png"
        return self.cloudinary.url(source options: ["transformation": transform])
    }

これを実行すると以下の URL が生成されます。
"http://res.cloudinary.com/da6d5qvbf/image/upload/c_thumb,g_face,h_90,r_max,w_90/sampleImage.png"

管理画面

画像加工の設定は、管理画面でも行うことができます。

管理画面

また、一回使ったことのある設定は「Transformations」に残ります。これをうまく利用すれば、swfit プロジェクトの画像加工はより便利になります。

Transformations

この設定内容を編集し分かりやすいフィルタ名を与え、今後直接 CLTransformation の named プロパティにフィルタ名を設定すれば、指定する画像を取得できます。 具体的な実装:

実装

実装2

このように編集したら、前のコードは以下のように変更できます。

    func getAvatarIconUrlWithTransformName() -> String {
        let transform = CLTransformation()
        transform.named = "avatarIconSetting"
        let public_id =  "sampleImage.png"
        return self.cloudinary.url(public_id, options: ["transformation": transform])
    }

非常に読みやすくなりました。

まとめ

今回は Cloudinary の最も基本的な画像加工について紹介いたしました。
Cloudinary には他にも面白い機能が沢山あるので、ぜひ皆さんも試してみてください。