copy.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package graphics
  2. import (
  3. "errors"
  4. "image"
  5. "os"
  6. "github.com/nfnt/resize"
  7. )
  8. func ImageCopy(src image.Image, x, y, w, h int) (image.Image, error) {
  9. var subImg image.Image
  10. if rgbImg, ok := src.(*image.YCbCr); ok {
  11. subImg = rgbImg.SubImage(image.Rect(x, y, x+w, y+h)).(*image.YCbCr) //图片裁剪x0 y0 x1 y1
  12. } else if rgbImg, ok := src.(*image.RGBA); ok {
  13. subImg = rgbImg.SubImage(image.Rect(x, y, x+w, y+h)).(*image.RGBA) //图片裁剪x0 y0 x1 y1
  14. } else if rgbImg, ok := src.(*image.NRGBA); ok {
  15. subImg = rgbImg.SubImage(image.Rect(x, y, x+w, y+h)).(*image.NRGBA) //图片裁剪x0 y0 x1 y1
  16. } else if rgbImg, ok := src.(*image.Paletted); ok {
  17. subImg = rgbImg.SubImage(image.Rect(x, y, x+w, y+h)).(*image.Paletted) //图片裁剪x0 y0 x1 y1
  18. } else {
  19. return subImg, errors.New("图片解码失败")
  20. }
  21. return subImg, nil
  22. }
  23. func ImageCopyFromFile(p string, x, y, w, h int) (image.Image, error) {
  24. var src image.Image
  25. file, err := os.Open(p)
  26. if err != nil {
  27. return src, err
  28. }
  29. defer file.Close()
  30. src, _, err = image.Decode(file)
  31. return ImageCopy(src, x, y, w, h)
  32. }
  33. func ImageResize(src image.Image, w, h int) image.Image {
  34. return resize.Resize(uint(w), uint(h), src, resize.Lanczos3)
  35. }
  36. func ImageResizeSaveFile(src image.Image, width, height int, p string) error {
  37. dst := resize.Resize(uint(width), uint(height), src, resize.Lanczos3)
  38. return SaveImage(p, dst)
  39. }