コードの目的は、画像をダウンロードし、大きな親画像に貼り付けて、結果を保存することです。
かなりの失敗の後、私は次のコードが機能するようになりました。
ただし、ターゲットイメージをファイルに保存する/それをhttpResponseに渡すには、bytes.Buffer
およびを使用するよりも良い方法がありwriter
ますか?
package main
import (
"image"
"image/draw"
"image/jpeg"
"os"
// "image/color"
// "io/ioutil"
// "fmt"
"bufio"
"bytes"
"log"
"net/http"
)
func main() {
// Fetch an image.
resp, err := http.Get("http://katiebrookekennels.com/wp-content/uploads/2014/10/dog-bone4.jpg")
if err != nil {
log.Panic(err)
}
defer resp.Body.Close()
// Keep an in memory copy.
myImage, err := jpeg.Decode(resp.Body)
if err != nil {
log.Panic(err)
}
// Prepare parent image where we want to position child image.
target := image.NewRGBA(image.Rect(0, 0, 800, 800))
// Draw white layer.
draw.Draw(target, target.Bounds(), image.White, image.ZP, draw.Src)
// Draw child image.
draw.Draw(target, myImage.Bounds(), myImage, image.Point{0, 0}, draw.Src)
// Encode to jpeg.
var imageBuf bytes.Buffer
err = jpeg.Encode(&imageBuf, target, nil)
if err != nil {
log.Panic(err)
}
// Write to file.
fo, err := os.Create("img.jpg")
if err != nil {
panic(err)
}
fw := bufio.NewWriter(fo)
fw.Write(imageBuf.Bytes())
}
jpeg.Encode()
io.Writer
エンコードされた画像を(JPEG形式で)書き込むことを期待します。どちら*os.File
とhttp.ResponseWriter
実装io.Writer
そうする代わりに、あまりにもbytes.Buffer
、あなたが直接、あまりにもファイルまたはHTTPレスポンスライターを渡すことができます。
画像を直接ファイルに保存するには:
f, err := os.Create("img.jpg")
if err != nil {
panic(err)
}
defer f.Close()
jpeg.Encode(f, target, nil)
画像として提供するには:
// w is of type http.ResponseWriter:
jpeg.Encode(w, target, nil)
これらの質問でいくつかの例を見ることができます(JPEGおよびPNG画像の保存/読み込み)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加