远程图片本地化,使用Go下载远程图片到本地
最近在爬自己在B站发的视频,每个视频都有缩略图,这里使用Go语言下载这些远程图片,做图片本地化。
使用方法
func main() {
onLinePic := "http://www.golang-mix.com/imgs/user.png"
// 这里只写路径和文件名 没有写后缀 在下载的过程中会检查 自动将后缀补上去
localPicName := "/data/pic/picName"
DownPic(onLinePic, localPicName)
}
// DownPic 远程下载图片
func DownPic(src, dest string) (string, error) {
re, err := http.Get(src)
if err != nil {
return "", err
}
defer re.Body.Close()
fix := ""
if idx := strings.LastIndex(src, "."); idx != -1 {
fix = strings.ToLower(src[idx+1:])
}
if fix == "" {
return "", errors.Errorf("unknow pic type, pic path: %s", src)
}
thumbF, err := os.OpenFile(dest+"."+fix, os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return "", err
}
defer thumbF.Close()
if fix == "jpeg" || fix == "jpg" {
img, err := jpeg.Decode(re.Body)
if err != nil {
return "", err
}
if err = jpeg.Encode(thumbF, img, &jpeg.Options{Quality: 40}); err != nil {
return "", err
}
} else if fix == "png" {
img, err := png.Decode(re.Body)
if err != nil {
return "", err
}
if err = png.Encode(thumbF, img); err != nil {
return "", err
}
} else if fix == "gif" {
img, err := gif.Decode(re.Body)
if err != nil {
return "", err
}
if err = gif.Encode(thumbF, img, nil); err != nil {
return "", err
}
} else {
return "", errors.New("不支持的格式")
}
return "." + fix, nil
}
声明: 因编程语言版本更新较快,当前文章所涉及的语法或某些特性相关的信息并不一定完全适用于您当前所使用的版本,请仔细甄别。文章内容仅作为学习和参考,若有错误,欢迎指正。
开发者
专题·造轮子
Golang·热门