我是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
作为参数,这就是我正在做的。
2条答案
按热度按时间pjngdqdw1#
您的程式码有两个问题。
第一个是你已经把测试的
err != nil
反转了,所以你试着解码图像只有在你有错误的情况下,它应该是err == nil
。第二个,正如jimt所说的,就是你使用
filepath.Name()
,它只包含os.Open()
中的文件名,这就是为什么err
总是被设置,因此总是进入if
,并解码一个不存在的文件。下面是更正后的代码:
另外,如果你的目录中有其他的图像格式,不要忘记添加
image/jpeg
以外的其他导入。svmlkihl2#
如果你想通过使用image.decode(reader)而不使用image.decodeConfig来获取图像的宽度和高度