1
0

source.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package poster
  2. import (
  3. "bytes"
  4. "crypto/tls"
  5. "errors"
  6. "image"
  7. "io/ioutil"
  8. "net/http"
  9. )
  10. // GetImage 从源读取图片,支持网络和本地
  11. func GetImage(src string) (m image.Image, err error) {
  12. var r *bytes.Reader
  13. r, err = getResourceReader(src)
  14. if err != nil {
  15. return nil, err
  16. }
  17. m, _, err = image.Decode(r)
  18. return
  19. }
  20. // getResourceReader 读取图片 支持本地和网络图片
  21. func getResourceReader(src string) (r *bytes.Reader, err error) {
  22. if len(src) < 5 {
  23. return nil, errors.New("图片源错误")
  24. }
  25. //跳过证书验证
  26. c := &http.Client{
  27. Transport: &http.Transport{
  28. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  29. },
  30. }
  31. if src[0:4] == "http" {
  32. resp, err := c.Get(src)
  33. if err != nil {
  34. return r, err
  35. }
  36. defer resp.Body.Close()
  37. fileBytes, err := ioutil.ReadAll(resp.Body)
  38. if err != nil {
  39. return r, err
  40. }
  41. r = bytes.NewReader(fileBytes)
  42. } else {
  43. fileBytes, err := ioutil.ReadFile(src)
  44. if err != nil {
  45. return nil, err
  46. }
  47. r = bytes.NewReader(fileBytes)
  48. }
  49. return r, nil
  50. }