1

私はおそらく pressly/chi を使用したいと思いますが、違いはないと思います。このような入力 URL が与えられると想像するexample.com/Jd8saD.jpg?resize=420x320&fit=crop&rotate=90と、次の理由により、次の GET 関数に移動しますr.Get("/:image", ImageGET)

function ImageGET(w http.ResponseWriter, r *http.Request) {
  if r.URL.Query().Get("resize") != "" {
    // do something
  }
  if r.URL.Query().Get("crop") != "" {
    // do something
  }
  if r.URL.Query().Get("watermark") != "" {
    // do something
  }
  etc
}

さて、私の質問は、画像処理を行う関数をどのように設計して、すべてを適切かつ効率的に処理できるようにするかということです。サイズ変更を処理するコードを書くとは思いませんが、これらの関数はどのようになりますか? 多分:

function Resize(size string) (imgfile?, error) {
  // the resize stuff
}

返されたものは何でしょうimgfileか?関連する img 情報を含む構造体?

4

2 に答える 2

1

おそらく、

imgfile

ディスクに保存されたデータ(つまり、実際のjpgファイル)ではなくimage.Image、インターフェイスを満たします

イメージは色の有限の長方形グリッドです。カラー モデルから取得した色値。

サードパーティの golang イメージ ライブラリの多くは、イメージのimage.Image操作に使用されます。


image.Image関数内のファイル名によって取得 (メモリに読み込まれ) されimageGET、クエリに従って変更された標準インターフェイスを使用します。標準ライブラリのjpeg golang ライブラリも参照できます。

function ImageGET(w http.ResponseWriter, r *http.Request) {
  // GetJPEGImageFromFileSystem must decode os.File content and 
  // return a golang image.Image interface
  img, _ := GetJPEGImageFromFileSystem(r.URL.Query().Get("filename"))
  if r.URL.Query().Get("resize") != "" {
      // If resizing, write over the image.Image in Memory, 
      // but not the image File on disk
      img, _ = Resize(img, r.URL.Query().GET("resize"))
  }
  // etc...
}

function Resize(img image.Image, size string) (image.Image, error) {
  // the resize stuff -- or, alternatively just call a dependency in the original handler to resize
  return resizedImage, nil
}
于 2017-05-01T17:18:21.833 に答える