gpt4 book ai didi

image.Decode() 未知格式

转载 作者:行者123 更新时间:2023-12-01 20:23:51 26 4
gpt4 key购买 nike

我有一个存储在文件系统中的图像。该文件应解码为图像,然后调整大小。我知道如何调整它的大小,但我无法解码图像。无论我在程序中插入什么图像路径/图像,它都会产生:image: unknown format .
我已经阅读了所有关于这个问题的网站,但没有一个对我有帮助。此代码代表我简化的程序逻辑(我想了解为什么会发生此错误)。在此先感谢您的关注!

import (
"bufio"
"fmt"
"image"
"image/png"
_ "image/jpeg"
_ "image/png"
"log"
"os"
)

func main() {

file, err := os.Open(`D:\photos\img.png`)
if err != nil {
log.Fatal(err)
}
defer file.Close()
config, format, err := image.DecodeConfig(bufio.NewReader(file))
if err != nil {
log.Fatal(err)
}
fmt.Println(format, config.Height, config.Width, config.ColorModel)
decodedImg, format, err := image.Decode(bufio.NewReader(file)) // ERROR HERE
if err != nil {
log.Fatal(err)
}
fmt.Println(format,"decode")
outputFile, err := os.Create(`D:\photos\image.png`)
if err != nil {
log.Fatal(err)
}
defer outputFile.Close()
png.Encode(outputFile, decodedImg)

}
输出:
png 512 512 &{0x4ae340}
2020/07/11 09:37:10 image: unknown format

最佳答案

两个image.Decodeimage.DecodeConfig使用传入的 io.Reader 中的字节.
这意味着在 DecodeConfig 之后完成后,文件中的位置在已经读取的字节之后。 image.Decode然后与相同的基础文件一起出现,希望找到图像标题,但没有。bufio.NewReader 将位置重置为文件的开头(因为它不能,它只知道底层对象是 io.Reader )。
您有一些解决方案(按顺序或个人喜好):

  • seek在调用 image.Decode 之前回到文件的开头.例如:newOffset, err := file.Seek(0, 0)
  • 不要使用 image.DecodeConfig (这可能不是一个选项)
  • 将文件读入 []byte并使用 bytes.Buffer
  • 再次打开文件(效率不是特别高)

  • 作为旁注,您不需要包装 os.File bufio.Reader 中的对象,它已经实现了 io.Reader界面。

    关于image.Decode() 未知格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62846156/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com