[英]Implement io.Reader from image.RGBA
我需要一點提示。 我正在Go中創建圖像的縮略圖,並希望將其傳遞給jpegoptim進行壓縮。
jpegoptim具有--stdin和--stdout標志,我想使用它們。 現在,我不想首先將生成的圖像保存到磁盤,而是將我的* image.RGBA轉換為實現io.Reader的內容,因此可以將其傳遞給exec.Cmd.Stdin
我對如何實現這一目標有些迷茫,如果有人可以指出正確的方向,那將會很棒。
謝謝
在這種情況下,您不需要實現自己的io.Reader
。 使用io.Pipe
和jpeg.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.