func (b *Bucket) GetImageSize(key string, sizing *imgry.Sizing) (*Image, error) { m := metrics.GetOrRegisterTimer("fn.bucket.GetImageSize", nil) defer m.UpdateSince(time.Now()) // Find the original image origIm, err := b.DbFindImage(key, nil) if err != nil { return nil, err } // Calculate the sizing ahead of time so our query is updated // and we can find it in our db sizing.CalcResizeRect(&imgry.Rect{origIm.Width, origIm.Height}) sizing.Size.Width = sizing.GranularizedWidth() sizing.Size.Height = sizing.GranularizedHeight() // Find the specific size im, err := b.DbFindImage(key, sizing) if err != nil && err != ErrImageNotFound { return nil, err } if im != nil { // Got it! return im, nil } // Build a new size from the original im2, err := origIm.MakeSize(sizing) defer im2.Release() if err != nil { return nil, err } err = b.DbSaveImage(im2, sizing) return im2, err }