簡體   English   中英

從image.RGBA實現io.Reader

[英]Implement io.Reader from image.RGBA

我需要一點提示。 我正在Go中創建圖像的縮略圖,並希望將其傳遞給jpegoptim進行壓縮。

jpegoptim具有--stdin和--stdout標志,我想使用它們。 現在,我不想首先將生成的圖像保存到磁盤,而是將我的* image.RGBA轉換為實現io.Reader的內容,因此可以將其傳遞給exec.Cmd.Stdin

我對如何實現這一目標有些迷茫,如果有人可以指出正確的方向,那將會很棒。

謝謝

在這種情況下,您不需要實現自己的io.Reader 使用io.Pipejpeg.Encode ,例如

func main() {
    //Prepare image ...
    img := ...

    //Prepare output (file etc.) ...
    outFile := ...

    //Use pipe to connect JPEG encoder output to cmd's STDIN
    pr, pw := io.Pipe()

    //Exec jpegoptim in goroutine
    done := make(chan bool, 1)
    go func() {
        //execute command
        cmdErr := bytes.Buffer{}
        cmd := exec.Command("jpegoptim", "--stdin", "--verbose")
        cmd.Stdin = pr       //image input from PIPE
        cmd.Stderr = &cmdErr //message
        cmd.Stdout = outFile //optimize image output

        if err := cmd.Run(); err != nil {
            // handle error
        }
        fmt.Printf("Result: %s\n", cmdErr.String())
        close(done)
    }()

    //ENCODE image to JPEG then write to PIPE
    o := jpeg.Options{Quality: 90}
    jpeg.Encode(pw, img, &o)

    //When done, close the PIPE
    if err := pw.Close(); err != nil {
        // handle error
    }

    //Wait for jpegoptim
    <-done
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM