123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- package image
- import (
- "fmt"
- "gopkg.in/gographics/imagick.v3/imagick"
- "icloudapp.cn/tools/util"
- fileObj "icloudapp.cn/tools/util/file"
- )
- type Image struct {
- Basic
- Path string
- }
- func NewImage(path string) *Image {
- ImageInstance := &Image{
- Path: path,
- }
-
- ImageInstance.SetSize(0, 0)
- ImageInstance.SetPoint(0, 0)
- return ImageInstance
- }
- func (i *Image) Create() (*imagick.MagickWand, error) {
- if i.File != "" {
- i.File = fmt.Sprintf("%s/%s", i.Path, i.File)
- if !fileObj.IsFile(i.File) {
- return nil, util.NewError(fmt.Sprintf("文件 %s 不存在", i.File))
- }
- }
- imageMW := imagick.NewMagickWand()
- if i.File != "" {
- if err := imageMW.ReadImage(i.File); err != nil {
- return nil, util.NewError(fmt.Sprintf("imageMW.ReadImageBlob:%s", err.Error()))
- }
- if err := imageMW.ResizeImage(i.ViewSize.Width, i.ViewSize.Height, imagick.FILTER_LANCZOS); err != nil {
- return nil, util.NewError(fmt.Sprintf("imageMW.ResizeImage:%s", err.Error()))
- }
- } else {
- if err := imageMW.NewImage(i.ViewSize.Width, i.ViewSize.Height, OpacityPixel()); err != nil {
- return nil, util.NewError(fmt.Sprintf("imageMW.NewImage:%s", err.Error()))
- }
- }
- if err := imageMW.SetImageFormat("PNG"); err != nil {
- return nil, util.NewError("imageMW.SetImageFormat", err.Error())
- }
- if i.Background != "" {
- if err := imageMW.SetImageBackgroundColor(Pixel(i.Background)); err != nil {
- return nil, util.NewError(fmt.Sprintf("imageMW.SetImageBackgroundColor:%s", err.Error()))
- }
- }
- if i.Angle > 0 {
- if err := imageMW.RotateImage(OpacityPixel(), i.Angle); err != nil {
- return nil, util.NewError(fmt.Sprintf("imageMW.RotateImage:%s", err.Error()))
- }
- fmt.Println(imageMW.GetImageWidth(), i.ViewSize.Width, imageMW.GetImageHeight(), i.ViewSize.Height)
- alignX := float64(imageMW.GetImageWidth()-i.ViewSize.Width) / 2
- alignY := float64(imageMW.GetImageHeight()-i.ViewSize.Height) / 2
- i.SetPoint(i.ViewPoint.X-alignX, i.ViewPoint.Y-alignY)
- }
- return imageMW, nil
- }
- func (i *Image) Thumb() (*imagick.MagickWand, error) {
- if !fileObj.IsFile(i.File) {
- return nil, util.NewError(fmt.Sprintf("文件 %s 不存在", i.File))
- }
- mw := imagick.NewMagickWand()
- var err error
- if err = mw.ReadImage(i.File); err != nil {
- return nil, util.NewError("mw.ReadImage err :", err.Error())
- }
- width := mw.GetImageWidth()
- height := mw.GetImageHeight()
- imageScale := NewScale(width, height, 1.0)
- scale := imageScale.MinRatio(i.ViewSize.Width, i.ViewSize.Height)
- if err = mw.ResizeImage(scale.Width, scale.Height, imagick.FILTER_LANCZOS); err != nil {
- return nil, util.NewError("mw.ResizeImage err :", err.Error())
- }
- return mw, nil
- }
- func (i *Image) Cut(position string) (*imagick.MagickWand, error) {
- if position == "" {
- position = "left"
- }
- mw := imagick.NewMagickWand()
- if err := mw.ReadImage(i.File); err != nil {
- return nil, util.NewError("mw.ReadImage err : ", err.Error())
- }
- sourceWidth := mw.GetImageWidth()
- sourceHeight := mw.GetImageHeight()
- imageScale := NewScale(sourceWidth, sourceHeight, 1.0)
- scale := imageScale.MaxRatio(i.ViewSize.Width, i.ViewSize.Height)
- if err := mw.ResizeImage(scale.Width, scale.Height, imagick.FILTER_LANCZOS); err != nil {
- return nil, util.NewError("mw.ResizeImage err : ", err.Error())
- }
- x, y, width, height := i.Position(position, scale.Width, scale.Height, i.ViewSize)
- if err := mw.CropImage(width, height, x, y); err != nil {
- return nil, util.NewError("mw.CropImage err : ", err.Error())
- }
- return mw, nil
- }
- func (i *Image) Resize() (*imagick.MagickWand, error) {
- imageMV := imagick.NewMagickWand()
- if err := imageMV.ReadImage(i.File); err != nil {
- return nil, util.NewError("Resize", "ReadImage", err.Error())
- }
- if err := imageMV.ResizeImage(i.ViewSize.Width, i.ViewSize.Height, imagick.FILTER_LANCZOS); err != nil {
- return nil, util.NewError("Resize", "ResizeImage", err.Error())
- }
-
- if i.Angle > 0 {
- if err := imageMV.RotateImage(OpacityPixel(), i.Angle); err != nil {
- return nil, util.NewError("Resize", "ResizeImage", err.Error())
- }
- alignX := float64(imageMV.GetImageWidth()-i.ViewSize.Width) / 2
- alignY := float64(imageMV.GetImageHeight()-i.ViewSize.Height) / 2
- i.ViewPoint.X = alignX
- i.ViewPoint.Y = alignY
- }
- return imageMV, nil
- }
|