当前位置: 首页 > 后端技术 > PHP

GolangGin练习,连载十六,在图上画文字

时间:2023-03-29 23:36:51 PHP

鍘熸枃鍦板潃锛欸olangGin缁冧範杩炶浇16鍦ㄥ浘涓婄敾鏂囧瓧椤圭洰鍦板潃锛歡o-gin-example鍓嶈█鏈珷涓鸿繛杞?5鐨勮ˉ鍏呭唴瀹癸紝寤鸿涓€璧峰悆銆備富瑕佸疄鐜板悎骞舵捣鎶ヤ笂缁樺埗鏂囧瓧鐨勫姛鑳斤紙杩欎釜闇€姹備篃寰堝父瑙侊級锛屽唴瀹瑰疄鐜拌捣鏉ユ瘮杈冪畝鍗曘€傝繖閲屼娇鐢ㄧ殑瀛椾綋鏄井杞泤榛戯紝璇风偣鍑讳笅杞藉苟瀛樻斁鍦╮untime/fonts鐩綍涓嬶紙瀛椾綋鏂囦欢鍗?6MB锛夊畨瑁?goget-ugithub.com/golang/freetype缁樺埗鏂囧瓧鎵撳紑service/article_service/article_poster.go鏂囦欢锛屾坊鍔犵粯鍒舵枃瀛楃殑涓氬姟閫昏緫锛屽涓嬶細ArticlePosterBg)DrawPoster(d*DrawText,fontNamestring)閿欒{fontSource:=setting.AppSetting.RuntimeRootPath+setting.AppSetting.FontSavePath+fontNamefontSourceBytes,err:=ioutil.ReadFile(fontSource)iferr!=nil{returnerr}trueTypeFont,err:=freetype.ParseFont(fontSourceBytes)濡傛灉err!=nil{returnerr}fc:=freetype.NewContext()fc.SetDPI(72)fc.SetFont(trueTypeFont)fc.SetFontSize(d.Size0)fc.SetC鍢村攪(d.JPG.Bounds())fc.SetDst(d.JPG)fc.SetSrc(image.Black)pt:=freetype.Pt(d.X0,d.Y0)_,err=fc.DrawString(d.Title,pt)iferr!=nil{returnerr}fc.SetFontSize(d.Size1)_,err=fc.DrawString(d.SubTitle,freetype.Pt(d.X1,d.Y1))iferr!=nil{returnerr}err=jpeg.Encode(d.Merged,d.JPG,nil)iferr!=nil{returnerr}returnnil}杩欓噷涓昏浣跨敤浜唂reetype鍖咃紝娑夊強鍒颁互涓嬬粏鑺傦細1.freetype.NewContext锛氭柊寤轰竴涓狢ontext锛岄噷闈細璁剧疆涓€浜涢粯璁ゅ€糵uncNewContext()*Context{return&Context{r:raster.NewRasterizer(0,0),fontSize:12,dpi:72,scale:12<<6銆亇}2銆乫c.SetDPI锛氳缃睆骞曟瘡鑻卞鐨勫垎杈ㄧ巼3銆乫c.SetFont锛氳缃敤浜庣粯鍒舵枃瀛楃殑瀛椾綋4銆乫c.SetFontSize锛氳缃瓧浣撳ぇ灏忥紝浠ョ偣涓哄崟浣?銆乫c.SetClip锛歋etCliptherectanglefordrawing6.fc.SetDst锛氳缃洰鏍囧浘鍍?.fc.SetSrc锛氳缃粯鍥炬搷浣滅殑婧愬浘鍍忥紝閫氬父涓篿mage.Uniformvar(//Black鏄笉閫忔槑鐨勯粦鑹插潎鍖€鍥惧儚銆侭lack=NewUniform(color.Black)//鐧借壊鏄笉閫忔槑鐨勭櫧鑹插埗鏈峣mage.White=NewUniform(color.White)//Transparent鏄畬鍏ㄩ€忔槑鐨勫潎鍖€鍥惧儚銆俆ransparent=NewUniform(color.Transparent)//Opaque鏄畬鍏ㄤ笉閫忔槑鐨勫潎鍖€鍥惧儚銆侽paque=NewUniform(color.Opaque))8銆乫c.DrawString锛氭牴鎹甈t鐨勫潗鏍囧€肩粯鍒剁粰瀹氱殑鏂囨湰鍐呭涓氬姟閫昏緫鎵撳紑service/article_service/article_poster.go鏂规硶锛屽湪鏂规硶涓坊鍔犵粯鍒舵枃鏈殑浠g爜閫昏緫鐢熸垚鏂规硶锛屽涓嬶細func(a*ArticlePosterBg)Generate()(string,string,error){fullPath:=qrcode.GetQrCodeFullPath()fileName,path,err:=a.Qr.Encode(fullPath)iferr!=nil{return"","",err}if!a.CheckMergedImage(path){...draw.Draw(jpg,jpg.Bounds(),bgImage,bgImage.Bounds().Min,draw.Over)缁樺埗.Draw(jpg,jpg.Bounds(),qrImage,qrImage.Bounds().Min.Sub(image.Pt(a.Pt.X,a.Pt.Y)),draw.Over)err=a.DrawPoster(&DrawText{JPG:jpg,Merged:mergedF,Title:銆奊olangGin绯诲垪鏂囩珷銆?X0:80,Y0:160,Size0:42,SubTitle:"---Friedfish",X1:320,Y1:220,Size1:36,},"msyhbd.ttc")iferr!=nil{return"","",err}}returnfileName,path,nil}楠岃瘉璁块棶鐢熸垚鏂囩珷娴锋姤鎺ュ彛$HOST/api/v1/articles/poster/generate?token=$token锛屾煡鐪嬬敓鎴愮粨鏋滐紝濡備笅鍥句笉闅惧疄鏂斤紝鑰岃繖涓や釜瑕佹眰閫氬父鍚屾椂鍑虹幇銆傚ぇ瀹跺彲浠ュ缁冧範浜嗚В閲岄潰鐨勯€昏緫鍜屽叾浠朅PI銆傪煒佸弬鑰冩湰绯诲垪绀轰緥浠g爜go-gin-example鏈郴鍒楃洰褰曡繛杞?Golang浠嬬粛鍙婄幆澧冨畨瑁呰繛杞?鏋勫缓BlogAPI鐨勶紙涓€锛夎繛杞?鏋勫缓BlogAPI鐨勶紙2锛夎繛杞?鏋勫缓BlogAPI鐨勶紙3锛夎繛杞?浣跨敤鐢ㄤ簬韬唤楠岃瘉鐨凧WT杩炶浇6鍐欎竴涓畝鍗曠殑鏂囦欢鏃ュ織杩炶浇7Golang浼橀泤閲嶅惎HTTP鏈嶅姟銆傝繛杞?.缁欏畠鍔犱笂Swagger銆傚簭鍒楀寲9.閮ㄧ讲Golang搴旂敤鍒癉ocker搴忓垪鍖?0.鑷畾涔塆ORM鍥炶皟瀹炵幇Redis缂撳瓨搴忓垪鍖?4.瀹炵幇瀵煎嚭瀵煎叆Excel搴忓垪鍖?5.鐢熸垚浜岀淮鐮佸苟鍚堝苟娴锋姤