本文整理汇总了Golang中github.com/thoas/picfit/image.ImageFile.Bounds方法的典型用法代码示例。如果您正苦于以下问题:Golang ImageFile.Bounds方法的具体用法?Golang ImageFile.Bounds怎么用?Golang ImageFile.Bounds使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/thoas/picfit/image.ImageFile
的用法示例。
在下文中一共展示了ImageFile.Bounds方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: TransformGIF
func (e *GoImageEngine) TransformGIF(img *imagefile.ImageFile, width int, height int, options *Options, trans Transformation) ([]byte, error) {
first, err := gif.Decode(bytes.NewReader(img.Source))
if err != nil {
return nil, err
}
factor := scalingFactorImage(first, width, height)
if factor > 1 && !options.Upscale {
return img.Source, nil
}
g, err := gif.DecodeAll(bytes.NewReader(img.Source))
if err != nil {
return nil, err
}
length := len(g.Image)
done := make(chan *Result)
images := make([]*image.Paletted, length)
processed := 0
for i := range g.Image {
go func(paletted *image.Paletted, width int, height int, position int, trans Transformation, options *Options) {
img := e.Scale(paletted, width, height, options.Upscale, trans)
bounds := img.Bounds()
done <- &Result{
Image: img,
Position: position,
Paletted: image.NewPaletted(image.Rect(0, 0, bounds.Max.X, bounds.Max.Y), paletted.Palette),
}
}(g.Image[i], width, height, i, trans, options)
}
for {
select {
case result := <-done:
bounds := result.Image.Bounds()
draw.Draw(result.Paletted, bounds, result.Image, bounds.Min, draw.Src)
images[result.Position] = result.Paletted
processed++
case <-time.After(time.Second * 5):
break
}
if processed == length {
break
}
}
close(done)
g.Image = images
buf := &bytes.Buffer{}
err = gif.EncodeAll(buf, g)
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}