Pertanyaan Ubah Ukuran Gambar


Saya menggunakan paket pengubahan ukuran Go di sini: https://github.com/nfnt/resize

1) Saya menarik Gambar dari S3, seperti:

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

2) Setelah itu, saya perlu mengubah ukuran gambar:

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

3) Unggah gambar ke keranjang S3 saya

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

Bagaimana cara mengubah data [] byte ke ---> image.Image dan kembali ke ----> data [] byte ??

Terima kasih sebelumnya atas bantuannya!


15
2018-04-08 14:55


asal


Jawaban:


Baca baca http://golang.org/pkg/image

// 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

34
2018-04-08 15:03



Ingin melakukannya 29 kali lebih cepat? Coba luar biasa vipsthumbnail sebagai gantinya:

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

Ini akan mengubah ukuran dan memangkas hasil penyimpanan dengan baik ke file:

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

Memanggil dari Go:

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()
}

11
2017-12-07 19:52



Anda bisa menggunakannya bimg, yang didukung oleh libvips (perpustakaan pengolahan gambar cepat yang ditulis dalam C).

Jika Anda mencari solusi pengubahan ukuran gambar sebagai layanan, lihatlah imajiner


2
2018-04-19 18:39