12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- // Copyright 2012 Google Inc. All rights reserved.
- // Use of this source code is governed by the Apache 2.0
- // license that can be found in the LICENSE file.
- // Package image provides image services.
- package image // import "google.golang.org/appengine/image"
- import (
- "fmt"
- "net/url"
- "golang.org/x/net/context"
- "google.golang.org/appengine"
- "google.golang.org/appengine/internal"
- pb "google.golang.org/appengine/internal/image"
- )
- type ServingURLOptions struct {
- Secure bool // whether the URL should use HTTPS
- // Size must be between zero and 1600.
- // If Size is non-zero, a resized version of the image is served,
- // and Size is the served image's longest dimension. The aspect ratio is preserved.
- // If Crop is true the image is cropped from the center instead of being resized.
- Size int
- Crop bool
- }
- // ServingURL returns a URL that will serve an image from Blobstore.
- func ServingURL(c context.Context, key appengine.BlobKey, opts *ServingURLOptions) (*url.URL, error) {
- req := &pb.ImagesGetUrlBaseRequest{
- BlobKey: (*string)(&key),
- }
- if opts != nil && opts.Secure {
- req.CreateSecureUrl = &opts.Secure
- }
- res := &pb.ImagesGetUrlBaseResponse{}
- if err := internal.Call(c, "images", "GetUrlBase", req, res); err != nil {
- return nil, err
- }
- // The URL may have suffixes added to dynamically resize or crop:
- // - adding "=s32" will serve the image resized to 32 pixels, preserving the aspect ratio.
- // - adding "=s32-c" is the same as "=s32" except it will be cropped.
- u := *res.Url
- if opts != nil && opts.Size > 0 {
- u += fmt.Sprintf("=s%d", opts.Size)
- if opts.Crop {
- u += "-c"
- }
- }
- return url.Parse(u)
- }
- // DeleteServingURL deletes the serving URL for an image.
- func DeleteServingURL(c context.Context, key appengine.BlobKey) error {
- req := &pb.ImagesDeleteUrlBaseRequest{
- BlobKey: (*string)(&key),
- }
- res := &pb.ImagesDeleteUrlBaseResponse{}
- return internal.Call(c, "images", "DeleteUrlBase", req, res)
- }
- func init() {
- internal.RegisterErrorCodeMap("images", pb.ImagesServiceError_ErrorCode_name)
- }
|