我正在尝试使用 mozjpeg 压缩 JPEG 图像。由于它没有官方的 go 绑定,我想我会调用它的 CLI 来进行压缩。
我尝试在以下情况下对用法进行建模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?
}
却没能完成。
另外,第二个问题是,我什么时候关闭命令?如何关闭命令?