首页 Golang

远程图片本地化,使用Go下载远程图片到本地

pyweeX 发布于 03-05
Golang
pyweeX

最近在爬自己在B站发的视频,每个视频都有缩略图,这里使用Go语言下载这些远程图片,做图片本地化。

使用方法

  1. func main() {
  2. onLinePic := "http://www.golang-mix.com/imgs/user.png"
  3. // 这里只写路径和文件名 没有写后缀 在下载的过程中会检查 自动将后缀补上去
  4. localPicName := "/data/pic/picName"
  5. DownPic(onLinePic, localPicName)
  6. }
  1. // DownPic 远程下载图片
  2. func DownPic(src, dest string) (string, error) {
  3. re, err := http.Get(src)
  4. if err != nil {
  5. return "", err
  6. }
  7. defer re.Body.Close()
  8. fix := ""
  9. if idx := strings.LastIndex(src, "."); idx != -1 {
  10. fix = strings.ToLower(src[idx+1:])
  11. }
  12. if fix == "" {
  13. return "", errors.Errorf("unknow pic type, pic path: %s", src)
  14. }
  15. thumbF, err := os.OpenFile(dest+"."+fix, os.O_CREATE|os.O_WRONLY, 0644)
  16. if err != nil {
  17. return "", err
  18. }
  19. defer thumbF.Close()
  20. if fix == "jpeg" || fix == "jpg" {
  21. img, err := jpeg.Decode(re.Body)
  22. if err != nil {
  23. return "", err
  24. }
  25. if err = jpeg.Encode(thumbF, img, &jpeg.Options{Quality: 40}); err != nil {
  26. return "", err
  27. }
  28. } else if fix == "png" {
  29. img, err := png.Decode(re.Body)
  30. if err != nil {
  31. return "", err
  32. }
  33. if err = png.Encode(thumbF, img); err != nil {
  34. return "", err
  35. }
  36. } else if fix == "gif" {
  37. img, err := gif.Decode(re.Body)
  38. if err != nil {
  39. return "", err
  40. }
  41. if err = gif.Encode(thumbF, img, nil); err != nil {
  42. return "", err
  43. }
  44. } else {
  45. return "", errors.New("不支持的格式")
  46. }
  47. return "." + fix, nil
  48. }

声明: 因编程语言版本更新较快,当前文章所涉及的语法或某些特性相关的信息并不一定完全适用于您当前所使用的版本,请仔细甄别。文章内容仅作为学习和参考,若有错误,欢迎指正。

讨论 支持 Markdown 语法 点击演示
回复
评论预览框

开发者

开发者·注册登录
  • 获取验证码
  • 取消