1
0

copy.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package graphics
  2. import (
  3. "image"
  4. "os"
  5. "errors"
  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.YCbCr) //图片裁剪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.YCbCr) //图片裁剪x0 y0 x1 y1
  16. } else {
  17. return subImg,errors.New("图片解码失败")
  18. }
  19. return subImg,nil
  20. }
  21. func ImageCopyFromFile(p string,x, y ,w, h int) (image.Image,error) {
  22. var src image.Image
  23. file, err := os.Open(p)
  24. if err != nil {
  25. return src, err
  26. }
  27. defer file.Close()
  28. src, _, err = image.Decode(file)
  29. return ImageCopy(src, x, y, w, h)
  30. }
  31. func ImageResize(src image.Image,w,h int) (image.Image) {
  32. return resize.Resize(uint(w), uint(h), src, resize.Lanczos3)
  33. }
  34. func ImageResizeSaveFile(src image.Image,width,height int,p string) error {
  35. dst := resize.Resize(uint(width), uint(height), src, resize.Lanczos3)
  36. return SaveImage(p,dst)
  37. }