Golang 圖片處理

jopen 9年前發布 | 28K 次閱讀 Google Go/Golang開發 Golang

AUTH:PHILO VERSION:2

本文主要介紹:

  1. 圖片文件的讀寫。
  2. 圖片在go緩存中如何與base64互相轉換
  3. 圖片裁剪
  4. </ol>

    本文中,為了方便查看,去掉所有錯誤判斷

    base64 -> file

    ddd, _ := base64.StdEncoding.DecodeString(datasource) //成圖片文件并把文件寫入到buffer
    err2 := ioutil.WriteFile( "./output.jpg" , ddd, 0666 ) //buffer輸出到jpg文件中(不做處理,直接寫到文件)

    </div>

    datasourcebase64 string

    base64 -> buffer

    ddd, _ := base64.StdEncoding.DecodeString(datasource) //成圖片文件并把文件寫入到buffer
    bbb := bytes.NewBuffer(ddd) // 必須加一個buffer 不然沒有read方法就會報錯


    轉換成buffer之后里面就有Reader方法了。才能被圖片API decode

    buffer-> ImageBuff(圖片裁剪,代碼接上面)

    m, _, _ := image.Decode(bbb) // 圖片文件解碼
    rgbImg := m.(*image.YCbCr)
    subImg := rgbImg.SubImage(image.Rect(0, 0, 200, 200)).(*image.YCbCr) //圖片裁剪x0 y0 x1 y1

    </div>

    img -> file(代碼接上面)

    f, _ := os.Create("test.jpg") //創建文件
    defer f.Close() //關閉文件
    jpeg.Encode(f, subImg, nil) //寫入文件

    </div>

    img -> base64(代碼接上面)

    emptyBuff := bytes.NewBuffer(nil) //開辟一個新的空buff
    jpeg.Encode(emptyBuff, subImg, nil) //img寫入到buff
    dist := make([]byte, 50000) //開辟存儲空間
    base64.StdEncoding.Encode(dist, emptyBuff.Bytes()) //buff轉成base64
    fmt.Println(string(dist)) //輸出圖片base64(type = []byte)
    _ = ioutil.WriteFile("./base64pic.txt", dist, 0666) //buffer輸出到jpg文件中(不做處理,直接寫到文件)

    </div>

    imgFile -> base64

    ff, _ := ioutil.ReadFile("output2.jpg") //我還是喜歡用這個快速讀文件
    bufstore := make([]byte, 5000000) //數據緩存
    base64.StdEncoding.Encode(bufstore, ff) // 文件轉base64
    _ = ioutil.WriteFile("./output2.jpg.txt", dist, 0666) //直接寫入到文件就ok完活了。

    </div>

    大概就是這些代碼基本上一些小網站都夠用。縮放什么的可以先靠前端。后端有個裁剪就夠了。

    </div> </div> 原文 http://www.philo.top/2015/03/05/golangImageLibrary/

     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!