image_optimを使ってMiddlemanのBuild時に画像を圧縮しよう


アドベントカレンダー2013 8日目の記事です。
Middleman Advent Calendar 2013 - Adventar

今北産業

  • homebrewでimage_optimに必要なファイルをいれる
  • gemとconfig.rbの設定
  • buildに結構時間がかかるようになる(!)

homebrewで必要なものをいれる

$ brew install advancecomp gifsicle jhead jpegoptim jpeg optipng pngcrush

これだとpngoutだけ入らないので

画像ファイルをまとめて最適化する - 終わる世界とコンテンツ

$ brew tap adamv/alt && brew install pngout

これをしておこうとしたら、このadamv/altリポジトリがなかった。

ので、無理やり入れてみる

ImageOptim::BinNotFoundError when pngout is not installed. · Issue #1 · plasticine/middleman-imageoptim

$ brew install https://raw.github.com/cbguder/homebrew/53ea33bab5372ea74117ace8c44aa7ea988e93c2/Library/Formula/pngout.rb

これでおk

middleman-imageoptimのインストール

gem "middleman-imageoptim", "~> 0.1.3"
$ bundle install --path vendor/bundle

cofig.rbでの設定

config.rb
configure :build do
  activate :imageoptim
end



activate :imageoptim do |options|
  # print out skipped images
  options.verbose = true

  # Setting these to true or nil will let options determine them (recommended)
  options.nice = true
  options.threads = true

  # Image extensions to attempt to compress
  options.image_extensions = %w(.png .jpg .gif)

  # compressor worker options, individual optimisers can be disabled by passing
  # false instead of a hash
  options.pngcrush_options  = {:chunks => ['alla'], :fix => false, :brute => false}
  #options.pngout_options    = {:copy_chunks => false, :strategy => 0}
  options.optipng_options   = {:level => 6, :interlace => false}
  options.advpng_options    = {:level => 4}
  options.jpegoptim_options = {:strip => ['all'], :max_quality => 100}
  options.jpegtran_options  = {:copy_chunks => false, :progressive => true, :jpegrescan => true}
  options.gifsicle_options  = {:interlace => false}
end

これで middleman buildでimage optim できた!

でも、結構時間がかかる

めちゃくちゃ画像の数が多くなるとけっこう困る遅さ。

10ファイルで2〜3秒くらいかかってる。