我試圖用mozjpeg壓縮一個JPEG圖像。由於它沒有正式的綁定,我想我只會調用它的CLI來進行壓縮。如何在一個io.Writer中包裝exec.Command
我嘗試compress/gzip
後的使用模式:
c := jpeg.NewCompresser(destFile)
_, err := io.Copy(c, srcFile)
現在的問題是,我怎麼換行CLI內Compresser所以它可以支持這種用法?
我想是這樣的:
type Compresser struct {
cmd exec.Command
}
func NewCompressor(w io.Writer) *Compresser {
cmd := exec.Command("jpegtran", "-copy", "none")
cmd.Stdout = w
c := &Compresser{cmd}
return c
}
func (c *Compresser) Write(p []byte) (n int, err error) {
if c.cmd.Process == nil {
err = c.cmd.Start()
if err != nil {
return
}
}
// How do I write p into c.cmd.Stdin?
}
,但不能完成它。
另外,第二個問題是,我何時關閉命令?如何關閉命令?