Cloudinaryという画像(や動画)をクラウドで管理するためのサービスがあるのですが、このサービスが実に便利っぽいので簡単に紹介したいと思います。
もちろん世の中には画像管理や共有のためのサービスはたくさんあるのですが、Cloudinaryには以下のような特徴があります。
- 様々な言語やフレームワーク向けにライブラリが提供されている(Rails、PHP、Node、Django、AngularJS、jQuery、Scala、iOS、Android等)
- 簡単に画像の加工を行うことができる(アップロード時にAPIで行ったり、管理画面から手動で行ったり、参照時のURLにパラメータを指定して行うことができる)
- 加工の種類が豊富(リサイズやトリミングなどはもちろんのこと、人物っぽい部分を切り出したりみたいなことも可能)
- タグ付けやアクセス制御、S3からのインポートやS3へのバックアップなどの運用系の機能が充実している
試しにScala用のライブラリを使ってアップロードしてみます。build.sbt
に以下の依存関係を追加します。
resolvers += "sonatype snapshots" at "https://oss.sonatype.org/content/repositories/snapshots" libraryDependencies += "com.cloudinary" %% "cloudinary-core-scala" % "0.9.7-SNAPSHOT"
こんな感じでアップロードできます(APIキーとかはサインアップ後の管理画面で確認できます)。
import com.cloudinary._ ... val cloudinary = new Cloudinary(Map( "cloud_name" -> "my_cloud_name", "api_key" -> "my_api_key", "api_secret" -> "my_api_secret" )) val file = new File("test.png") val result = cloudinary.uploader.upload(file, UploadParameters(Map( "public_id" -> "1234", // IDを指定 "tags" -> "special, for_homepage" // タグを指定 )))
ここではjava.io.File
を渡していますが、バイト配列を渡してアップロードすることもできます。また、public_id
を指定しておくとその名前で参照できたり、tags
を指定しておくとあとからタグを指定して一括削除できたりします。
アップロード時に変換処理を行う場合はtransformation
を指定します。
cloudinary.uploader.upload(bytes, UploadParameters(Map( "public_id" -> "1234", "transformation" -> Transformation().width(40).height(40), "tags" -> "special, for_homepage" )))
アップロード後に管理画面から手動で加工を行うこともできます。
アップロードした画像をHTMLから参照する場合はこんな感じ。
<img src="http://res.cloudinary.com/demo/image/upload/1234"/>
加工を行う場合はURLにパラメータを指定します。リサイズするならこんな感じ。画像加工のオプションについてはこちらを参照してください。
<img src="http://res.cloudinary.com/demo/image/upload/h_150,w_100/1234"/>
こんな感じで手軽に利用することができます。無料プランも用意されていますので試してみてみるといいと思います。
ただ、Scalaインターフェースは使ってるasync-http-clientのバージョンがちょっと古いみたいで、Dispatch 0.11.3と組み合わせて使ったら実行時にNoClassDefFoundError
が出てしまいました。まだSNAPSHOTしか提供されていないので、もしかするとScalaの場合でもJava用のライブラリを使ったほうがよいかもしれません。