【发布时间】:2017-07-25 09:09:10
【问题描述】:
我正在尝试使用 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?
}
但无法完成。
另外,第二个问题是,我什么时候关闭命令?如何关闭命令?
【问题讨论】:
标签: image-processing go mozjpeg