source.go 1.1 KB

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