首页 > 后端开发 > Golang > 如何解决 Go 中从 URL 保存图像时出现'cannot use m (type image.Image) as Type []byte”错误?

如何解决 Go 中从 URL 保存图像时出现'cannot use m (type image.Image) as Type []byte”错误?

Susan Sarandon
发布: 2024-11-30 08:00:17
原创
1044 人浏览过

How to Solve the

如何将图片从 URL 保存到文件:克服无法使用 m (type image.Image) 作为 Type []byte 错误

从 URL 获取图像并将其保存到文件是许多编程应用程序中的常见任务。在 Go 中,这可以使用 http 和 image 包来实现。但是,在尝试将 image.Image 类型传递给 ioutil.WriteFile 函数时,可能会遇到错误。

错误消息,“cannot use m (type image.Image) as type []byte in function argument,” 表示 image.Image 类型不能直接写入文件。这是因为 ioutil.WriteFile 函数需要一个字节切片 ([]byte) 作为其第二个参数。

在这种情况下将图像保存到文件的正确方法是完全避免解码图像。相反,您可以直接将包含图像数据的响应正文复制到文件中。

package main

import (
    "fmt"
    "io"
    "log"
    "net/http"
    "os"
)

func main() {
    url := "http://i.imgur.com/m1UIjW1.jpg"
    // don't worry about errors
    response, e := http.Get(url)
    if e != nil {
        log.Fatal(e)
    }
    defer response.Body.Close()

    //open a file for writing
    file, err := os.Create("/tmp/asdf.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    // Use io.Copy to just dump the response body to the file. This supports huge files
    _, err = io.Copy(file, response.Body)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Success!")
}
登录后复制

在此修改后的代码中:

  1. 我们不解码图像使用 image.Decode。
  2. 我们使用 os.Create 打开一个文件进行写入。
  3. 我们使用 io.Copy直接将包含原始图像数据的响应正文复制到文件中。这允许我们将图像保存到文件中,而不需要解码。

以上是如何解决 Go 中从 URL 保存图像时出现'cannot use m (type image.Image) as Type []byte”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板