Upgrade to Pro — share decks privately, control downloads, hide ads and more …

go-thumber-imagick

yoya
March 14, 2017

 go-thumber-imagick

Go-Thumber に ImageMagick をつなげた話

yoya

March 14, 2017
Tweet

More Decks by yoya

Other Decks in Technology

Transcript

  1. もくじ —  pixiv/go-thumber について —  go-thumber + ImageMagick —  GoImagick

    について —  ImageMagick 使用上の注意 —  画像プロキシ使用上の注意
  2. go-thumber の構造 —  go の net/http + swscale(ffmpeg) + libjpeg

    go-thumber thumberd go package net/http ffmpeg libswscale thumbnail libjpeg jpeg swscale mkthum cgo cgo HTTPプロキシ 縮小/拡大 JPEG入出力
  3. go-thumber 改造案 —  辛い! (YUV とか JPEG 決め打ちの作りなので尚更) go-thumber thumberd

    go package net/http ffmpeg libswscale thumbnail libjpeg jpeg swscale mkthum png gif libpng giflib libavfilter avfilter cgo cgo cgo cgo cgo 画像合成, 文字入れ 縮小/拡大
  4. ImageMagick で OK (2/2) —  メジャーな画像フォーマットからマイ ナーなものまで100種類以上に対応して る —  http://www.imagemagick.org/script/

    formats.php png jpeg gif inline sixel webp svg pdf 超メジャー 最近の キワモノ系 (Webの base64画像と か) ベクター画像 dcm 医療系 (DICOM等) 古いの sun
  5. Go で ImageMagick を使うには —  公式サイトを見る ◦  http://imagemagick.org/script/api.php#go —  MagickWand

    と MagickCore の Go バ インディング ◦  GoImagick はMagickCore の定義を取り入 れるけど、関数は MagickWand だけ使う
  6. GoImagick とは —  https://github.com/gographics/imagick —  MagickWand API (C言語)の Go バイン

    ディング (thin ラッパー) ◦  Go 言語で ImageMagick の機能が大体使える
  7. ImageMagick の注意点 —  沢山の画像形式に対応しすぎ ◦  脆弱性が入り易い (マイナーな形式は危険 ◦  形式を絞る必要がある — 

    処理が重たい ◦  画像データ全部をメモリ展開する ◦  文字入れはじめの1回目がめっちゃ重たい
  8. ImageMagick security policy —  Policy.xml で拒否する形式を指定 ◦  ブラックリスト形式でした (過去形) — 

    漏れがあるかも。。 —  バージョンアップで新しい形式が増え たら? <policymap> <policy domain="coder" rights="none" pattern="MVG" /> <policy domain="coder" rights="none" pattern=”GIF" /> </policymnap>
  9. ImageMagick security policy改良 ◦  ImageMagick 6.9.7-7 で仕様追加 –  ホワイトリスト形式 <policymap>

    <policy domain=”delegate” rights=“none” pattern=“*” /> <policy domain="coder" rights=”none" pattern=”*" /> <policy domain="coder" rights=”all" pattern=”{PNG,JPEG,GIF,WEBP}" /> </policymnap>
  10. まとめ —  go-thumber 改造楽しい —  GoImagick 結構いいよ —  Reverse proxy

    大事 —  Nginx proxy_cache_lock すごい —  ImageFlux みたいなクラウドサービス もあるよ