2014-04-08 5 views
15

मैं जाओ पैकेज का आकार बदलने के लिए यहाँ उपयोग कर रहा हूँ: https://github.com/nfnt/resizeजाओ रीसाइज़िंग छवियाँ

1) मैं S3 से एक छवि खींच रहा हूँ, जैसे:

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

2) उसके बाद, मैं आकार बदलना होगा छवि:

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

3) मेरी S3 बाल्टी के लिए छवि अपलोड करें

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

मैं डेटा [] बाइट को ---> छवि में कैसे बदल सकता हूं। छवि और वापस ----> डेटा [] बाइट ??

मदद के लिए अग्रिम धन्यवाद!

उत्तर

32

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 
+0

अद्भुत बनाने के लिए एक बार देख ले। "छवि/जेपीईजी" से पहले अंडरस्कोर क्या है? बाइट्स वेरिएबल मेरे लिए भी उपलब्ध कैसे है? आखिरकार, मैं वापस [] बाइट में कैसे एन्कोड कर सकता हूं? बहुत बहुत धन्यवाद –

+3

अंडरस्कोर यह है कि आप केवल इसके दुष्प्रभावों के लिए कुछ आयात करते हैं (इस मामले में डिकोडर को पंजीकृत करना)। 'Jpeg.Encode' का उपयोग करने के लिए अंडरस्कोर के बिना आयात करें। 'बाइट्स 'मानक पुस्तकालय में एक पैकेज है। – JimB

9

यह 29 times faster करना चाहते हैं पढ़ें? अद्भुत vipsthumbnail बजाय का प्रयास करें:

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

यह आकार परिवर्तन नहीं करते और अच्छी तरह से एक फाइल करने के लिए परिणाम बचत फसल:

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

जाओ से कॉलिंग:

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

ऐसे मामलों में जहां सिस्टम कॉल अवांछित हैं, वहां एक [बाध्यकारी] (https://github.com/DAddYE/vips) भी है। – transistor09

2

आप bimg इस्तेमाल कर सकते हैं, जो संचालित है libvips द्वारा (सी में लिखी एक तेज छवि प्रसंस्करण लाइब्रेरी)।

आप एक छवि एक सेवा के रूप समाधान आकार बदलने के लिए देख रहे हैं, imaginary

संबंधित मुद्दे