Image 使用golang获取图像大小

Image 使用golang获取图像大小,image,go,Image,Go,我是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 _

我是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
有人知道正确的方法吗?
在这里的文档中说我应该传递一个
io.Reader
作为参数,这就是我正在做的

您的代码有两个问题

第一个问题是您已将测试倒置
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
之外的其他导入。

filepath.Name()
仅生成文件名。不是它的全部路径。这可能是你的问题。尝试将
filepath.Join(dir\u to\u scan,filepath.Name())
传递到
os.Open()
。如果这不是问题所在,您可能正在尝试读取一些它不理解的奇怪图像格式。啊
err==nil
用图像名代替图像路径,真是个白痴!感谢florent bayle和jimt,它现在可以工作了;)