版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第golang圖片處理庫image基本操作目錄基本操作讀取新建保存圖片修改轉(zhuǎn)換裁剪縮放
基本操作
圖片的基本讀取與保存。
讀取
圖片讀取和文件讀取類似,需要先獲取流:
注冊圖片的解碼器(如:jpg則import_image/jpeg,png則import_image/png)通過os.open打開文件獲取流;通過image.Decode解碼流,獲取圖片;
import_"image/jpeg"
funcreadPic()image.Image{
f,err:=os.Open("C:\\hatAndSunglass.jpg")
iferr!=nil{
panic(err)
deferf.Close()
img,fmtName,err:=image.Decode(f)
iferr!=nil{
panic(err)
fmt.Printf("Name:%v,Bounds:%+v,Color:%+v",fmtName,img.Bounds(),img.ColorModel())
returnimg
}
解碼后返回的第一個參數(shù)為Image接口:
typeImageinterface{
ColorModel()color.Model//返回圖片的顏色模型
Bounds()Rectangle//返回圖片外框
At(x,yint)color.Color//返回(x,y)像素點的顏色
新建
新建一個圖片非常簡單,只需image.NewRGBA即可創(chuàng)建一個透明背景的圖片了
img:=image.NewRGBA(image.Rect(0,0,300,300))
保存
保存圖片也很簡單,需要編碼后,寫入文件流即可:
注冊圖片的解碼器通過os.create創(chuàng)建文件;通過png.Encode編碼圖片并寫入文件;
funcsavePic(img*image.RGBA){
f,err:=os.Create("C:\\tmp.jpg")
iferr!=nil{
panic(err)
deferf.Close()
b:=bufio.NewWriter(f)
err=jpeg.Encode(b,img,nil)
iferr!=nil{
panic(err)
b.Flush()
圖片修改
很多操作都需要用到繪制圖片:
funcDraw(dstImage,rimage.Rectangle,srcimage.Image,spimage.Point,opOp)
funcDrawMask(dstImage,rimage.Rectangle,srcimage.Image,spimage.Point,maskimage.Image,mpimage.Point,opOp)?
主要參數(shù)說明:
dst:繪圖的背景圖r:背景圖的繪圖區(qū)域src:要繪制的圖sp:要繪制圖src的開始點op:組合方式
DrawMask多了一個遮罩蒙層參數(shù),Draw為其一種特殊形式(遮罩相關參數(shù)為nil)。
轉(zhuǎn)換
讀取的jpg圖像不是RGBA格式的(為YCbCr格式);在操作前需要先轉(zhuǎn)換格式:
創(chuàng)建一個大小相同的RGBA圖像;把jpg畫到新建的圖像上去;
funcjpg2RGBA(imgimage.Image)*image.RGBA{
tmp:=image.NewRGBA(img.Bounds())
draw.Draw(tmp,img.Bounds(),img,img.Bounds().Min,draw.Src)
returntmp
裁剪
通過subImage方法可方便地裁剪圖片(需要為RGBA格式的)
funcsubImg(){
pic:=readPic()
fmt.Printf("Type:%T\n",pic)
img:=jpg2RCBA(pic)
sub:=img.SubImage(image.Rect(0,0,pic.Bounds().Dx(),pic.Bounds().Dy()/2))
savePic(sub.(*image.RGBA))
縮放
圖片縮放分為保持比例與不保持比例的縮放;保持比例時,要確定新圖片的位置(是否居中),以及如何填充空白處。
為了縮放,需要引入新的庫/x/image/draw。
在保持比例縮放時,需要先計算縮放后的圖片大小:
分別計算寬、高的縮放比例,以小者為準;若是居中(否則靠左上)需要計算填充大小,然后據(jù)此計算位置;
funccalcResizedRect(widthint,srcimage.Rectangle,heightint,centerAlignbool)image.Rectangle{
vardstimage.Rectangle
ifwidth*src.Dy()height*src.Dx(){//width/src.widthheight/src.height
ratio:=float64(width)/float64(src.Dx())
tH:=int(float64(src.Dy())*ratio)
pad:=0
ifcenterAlign{
pad=(height-tH)/2
dst=image.Rect(0,pad,width,pad+tH)
}else{
ratio:=float64(height)/float64(src.Dy())
tW:=int(float64(src.Dx())*ratio)
pad:=0
ifcenterAlign{
pad=(width-tW)/2
dst=image.Rect(pad,0,pad+tW,height)
returndst
有了縮放后的大小后,即可通過雙線性插值bilinear的方式進行圖片的縮放
img為要縮放的圖片width、height為縮放后的大小keepRatio為是否保持比例縮放fill為填充的顏色(R、G、B都為fill)centerAlign:保持比例縮放時,圖片是否居中存放
import(
"image"
"image/color"
"/x/image/draw"
funcresizePic(imgimage.Image,widthint,heightint,keepRatiobool,fillint,centerAlignbool)image.Image{
outImg:=image.NewRGBA(image.Rect(0,0,width,height))
if!keepRatio{
draw.BiLinear.Scale(outImg,outImg.Bounds(),img,img.Bounds(),draw.Over,nil)
returnoutImg
iffill!=0{
fillColor:=color.RGBA{R:uint8(fill),G:uint8(fill),B:uint8(fill),A:255}
draw.Draw(outImg,outImg.Bounds(),image.Uniform{C:fillColor},image.Point{},dr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年青海師范大學馬克思主義基本原理概論期末考試題含答案解析(必刷)
- 體檢中心護理健康教育與指導
- 2025年湖南大學馬克思主義基本原理概論期末考試模擬題含答案解析(奪冠)
- 2025年中國農(nóng)業(yè)大學馬克思主義基本原理概論期末考試模擬題附答案解析
- 2024年石阡縣幼兒園教師招教考試備考題庫含答案解析(奪冠)
- 2025年陸良縣幼兒園教師招教考試備考題庫及答案解析(必刷)
- 2024年長春建筑學院馬克思主義基本原理概論期末考試題及答案解析(奪冠)
- 2025年威寧彝族回族苗族自治縣招教考試備考題庫附答案解析(必刷)
- 2025年深圳開放大學馬克思主義基本原理概論期末考試模擬題附答案解析
- 2025年安徽糧食工程職業(yè)學院單招職業(yè)技能考試題庫附答案解析
- 《金融大數(shù)據(jù)分析》-課件 第3章 線性回歸
- 廣東省佛山市2024-2025學年高二上學期期末考試 語文 含解析
- 中藥材及中藥飲片知識培訓
- 2024年臺州三門農(nóng)商銀行招聘筆試真題
- 高一政治必修1、必修2基礎知識必背資料
- 垃圾處理設備維修合同
- DB4114T 105-2019 黃河故道地區(qū)蘋果化學疏花疏果技術規(guī)程
- 如何高效向GPT提問
- JT-T-969-2015路面裂縫貼縫膠
- 無抗養(yǎng)殖模式可行性分析
- 飼料廠HACCP計劃書
評論
0/150
提交評論