我正在編寫一個帶有一些簡單圖像操作的微服務。Go標準庫中是否存在將緩衝區編碼爲任何圖像格式的函數
當我將操縱圖像發送回用戶時,必須在通過緩衝區寫入之前將其正確編碼。
我可以很容易地檢測到格式,所以它不是一個問題。目前我使用我的格式字符串和不喜歡這樣寫道:
buffer := new(bytes.Buffer)
switch format { //format is just a string as returned by image.Decode()
case "jpeg":
err := jpeg.Encode(buffer, img, nil) //img is just an image.Image
if err != nil {
//Do some error handling
}
case "png":
err := png.Encode(buffer, img)
if err != nil {
//Do some error handling
}
//and so on...
現在,這工作得很好,我正要出去拆分成我自己的函數,當我開始想我一定是在這裏錯過了一些東西。沒有像image.Encode(buffer, image, format)
這樣的功能似乎太明顯了。
編寫它並不是很麻煩,但是如果我開始重新實現核心語言功能,我的代碼很快就會變得不必要的笨拙。
如果它只是不存在,因爲go是一個很好的整潔的語言,佔地面積小,我很酷。
我認爲有一個'image.Encode ...'方法的主要問題是,它會導致一個循環包引用(我會認爲,無論如何)。最好把這樣一個小實施留給消費者,我會想到的。 –
@SimonWhitehead圖像編碼和解碼包[註冊解碼函數](http://godoc.org/image#RegisterFormat)與圖像包。如果使用編碼功能完成相同的操作,則不會有循環包引用。 –
@SimonWhitehead我不會期望這是推理,因爲你可以寫這樣的方式,以便沒有一個循環的導入很平凡(上面是一個蹩腳的例子的一半)。 ThunderCat的答案觸及了我的想法,因爲編碼函數每個都有不同的選項,對其他編碼選項沒有意義。 –