2014-04-08 30 views
15

Burada Git boyutlandırmak paketi kullanıyorum: gibi https://github.com/nfnt/resizeGit boyutlandırma'nın Görüntüler

1) Ben S3 bir Resmin çekiyorum:

 image_data, err := mybucket.Get(key) 
     // this gives me data []byte 

2) Ondan sonra, yeniden boyutlandırmak gerekir resim:

 new_image := resize.Resize(160, 0, original_image, resize.Lanczos3) 
     // problem is that the original_image has to be of type image.Image 

3) benim S3 kovaya resmi yükle

 err : = mybucket.Put('newpath', new_image, 'image/jpg', 'aclstring') 
    // problem is that new image needs to be data []byte 

Veri [] baytını ---> image.Image öğesine ve ----> data [] byte ?? 'ya nasıl dönüştürebilirim?

Yardım için şimdiden teşekkür ederiz!

cevap

32

// you need the image package, and a format package for encoding/decoding 
import (
    "bytes" 
    "image" 
    "image/jpeg" 

    // if you don't need to use jpeg.Encode, import like so: 
    // _ "image/jpeg" 
) 

// Decoding gives you an Image. 
// If you have an io.Reader already, you can give that to Decode 
// without reading it into a []byte. 
image, _, err := image.Decode(bytes.NewReader(data)) 
// check err 

newImage := resize.Resize(160, 0, original_image, resize.Lanczos3) 

// Encode uses a Writer, use a Buffer if you need the raw []byte 
err = jpeg.Encode(someWriter, newImage, nil) 
// check err 
+0

Müthiş için bir göz atın. "Image/jpeg" için önceki alt çizgi nedir? Ayrıca bayt değişkeni bana göre nasıl kullanılabilir? Son olarak, [] bayt olarak nasıl geri kodlarım? Çok teşekkürler –

+3

Alt çizgi, yalnızca bir yan etkisi (bu durumda kod çözücüyü kaydettirme) için nasıl içe aktardığınızdır. Jpeg.Encode' kullanmak için alt çizgi olmadan içe aktarın. 'bytes', standart kitaplıktaki bir pakettir. – JimB

9

bunu 29 times faster yapmak ister http://golang.org/pkg/image mi? şaşırtıcı vipsthumbnail yerine deneyin:

sudo apt-get install libvips-tools 
vipsthumbnail --help-all 

Bu boyutlandırmak olacak ve güzel bir dosyaya sonucu tasarrufu kırpmak:

vipsthumbnail original.jpg -s 700x200 -o 700x200.jpg -c 

Go gelen arama:

func resizeExternally(from string, to string, width uint, height uint) error { 
    var args = []string{ 
     "--size", strconv.FormatUint(uint64(width), 10) + "x" + 
      strconv.FormatUint(uint64(height), 10), 
     "--output", to, 
     "--crop", 
     from, 
    } 
    path, err := exec.LookPath("vipsthumbnail") 
    if err != nil { 
     return err 
    } 
    cmd := exec.Command(path, args...) 
    return cmd.Run() 
} 
+3

Sistem çağrılarının istenmediği durumlarda, bir [bağlayıcı] (https://github.com/DAddYE/vips) de vardır. – transistor09

2

Sen bimg kullanabilirsiniz, güçlendirilmiş olduğunu tarafından libvips (C dilinde yazılmış hızlı bir görüntü işleme kitaplığı).

Eğer bir hizmet olarak çözüm boyutlandırma bir görüntü için arıyorsanız, imaginary