我是golang的新手,正在尝试获取目录中列出的所有图像的图像大小。这就是我所做的
package main
import (
"fmt"
"image"
_ "image/jpeg"
"io/ioutil"
"os"
)
const dir_to_scan string = "/home/da/to_merge"
func main() {
files, _ := ioutil.ReadDir(dir_to_scan)
for _, filepath := range files {
if reader, err := os.Open(filepath.Name()); err != nil {
defer reader.Close()
im, _, err := image.DecodeConfig(reader)
if err != nil {
fmt.Fprintf(os.Stderr, "%s: %v\n", filepath.Name(), err)
continue
}
fmt.Printf("%s %d %d\n", filepath.Name(), im.Width, im.Height)
} else {
fmt.Println("Impossible to open the file")
}
}
}
我有一个错误image.DecodeConfig
,说image: unknown format
有人对正确的方法有想法吗?在这里的文档中,http : //golang.org/src/pkg/image/format.go? s= 2676 : 2730# L82说我应该传递io.Reader
as参数,这就是我正在做的事情。
您的代码有两个问题。
第一个是您已经颠倒了测试err != nil
,因此仅在出现错误的情况下才尝试对图像进行解码。应该是err == nil
。
正如jimt所说,第二个是您使用filepath.Name()
,它仅包含中的文件名os.Open()
,这是err
始终设置的原因,因此始终输入if
,并解码不存在的文件。
这是更正的代码:
package main
import (
"fmt"
"image"
_ "image/jpeg"
"io/ioutil"
"os"
"path/filepath"
)
const dir_to_scan string = "/home/da/to_merge"
func main() {
files, _ := ioutil.ReadDir(dir_to_scan)
for _, imgFile := range files {
if reader, err := os.Open(filepath.Join(dir_to_scan, imgFile.Name())); err == nil {
defer reader.Close()
im, _, err := image.DecodeConfig(reader)
if err != nil {
fmt.Fprintf(os.Stderr, "%s: %v\n", imgFile.Name(), err)
continue
}
fmt.Printf("%s %d %d\n", imgFile.Name(), im.Width, im.Height)
} else {
fmt.Println("Impossible to open the file:", err)
}
}
}
另外,别忘了添加其他导入,image/jpeg
除非目录中有其他图像格式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句