当前位置: 首页 > news >正文

安阳网站开发泰安短视频seo

安阳网站开发,泰安短视频seo,义乌建设网站,微信网站 微信支付需求: 1,员工签到图片加水印 2,水印文字需要有半透明的底色,避免水印看不清 3,图片宽设置在600,小于600或者大于600都需要等比例修改图片的高度,保持水印在图片中的大小和位置 4,处理…

需求:
1,员工签到图片加水印
2,水印文字需要有半透明的底色,避免水印看不清
3,图片宽设置在600,小于600或者大于600都需要等比例修改图片的高度,保持水印在图片中的大小和位置
4,处理后图片和原图大小不要相差太多

调用:

	fileName := "display_20231229134926805_9512.jpg"waterMark := WaterMarkInfo{UserInfo: "1123456789-仲夏夜的梦  2023-12-28 17:23:54",SignAddress: "[119.092868,34.887314] 中国广东省深圳市龙岗区坂田街道华为基地广东省深圳市南山区广东省深圳市南山区广东省深圳市南山区广东省深圳市南山区广东省深圳市南山区",}addSigninWaterMark(fileName, waterMark)

图片加水印方法:

// WaterMarkInfo 水印信息
type WaterMarkInfo struct {UserInfo string //用户信息SignAddress string //签到地址
}// 增加打卡水印
func addSigninWaterMark(fileName string, waterMarkInfo WaterMarkInfo) error {//接口异常捕获defer func() {if err := recover(); err != nil {sbjlog.ExcLog("100", "addSigninWaterMark-图片增加水印异常:err=%v", err)}}()//需要加水印的图片imgfile, err := os.Open(tempImgDir + fileName)if err != nil {sbjlog.Debug("addSigninWaterMark os.Open ERROR:%v \r\n", err)return err}defer imgfile.Close()jpgimg, err := jpeg.Decode(imgfile)if err != nil {sbjlog.Debug("addSigninWaterMark jpeg.Decode ERROR:%v \r\n", err)return err}//对图片进行大小变更,图片的宽必须是600,水印文字长度是按照600来设置的imgWidth := uint(600)imgHeight := uint(800)if uint(jpgimg.Bounds().Dx()) != imgWidth {imgHeight = uint(imgWidth) * uint(jpgimg.Bounds().Dy()) / uint(jpgimg.Bounds().Dx())jpgimg = resize.Resize(600, imgHeight, jpgimg, resize.Bilinear)}//新建空白图层img := image.NewRGBA64(jpgimg.Bounds())pic2FramePadding := 20waterMarkHeight := 80waterMarkWidth := 600//新建空白白色图层transparentImg := image.NewRGBA64(image.Rect(0, 0, waterMarkWidth-pic2FramePadding/2, waterMarkHeight))//设置空白白色图层的大小draw.Draw(transparentImg,image.Rect(pic2FramePadding/2, pic2FramePadding/2, transparentImg.Bounds().Dx(), transparentImg.Bounds().Dy()),image.White,image.Point{},draw.Over)//把原来的图片画到空白图层上draw.Draw(img, jpgimg.Bounds(), jpgimg, jpgimg.Bounds().Min, draw.Over)//设置白色图层透明度,color.Alpha值在0-255之间,越靠近0越来透明mask := image.NewUniform(color.Alpha{180})//把空白图层画到空白图层上draw.DrawMask(img, img.Bounds().Add(image.Pt(0, jpgimg.Bounds().Dy()-waterMarkHeight-pic2FramePadding/2)), transparentImg, image.ZP, mask, image.Point{}, draw.Over)//给空白图层加水印err = addWaterMarkToImage(img, waterMarkInfo)if err != nil {return err}//保存到新文件中newfile, err := os.Create(tempImgDir + fileName)//在尽量不损失图片质量的情况下,保证绘制后图片和原图片一样大:jpeg.Options{94}err = jpeg.Encode(newfile, img, &jpeg.Options{94})if err != nil {fmt.Println(err)}return nil
}

图片加文字:

func addWaterMarkToImage(newTemplateImage *image.RGBA64, waterMarkInfo WaterMarkInfo) error {// 在写入之前有一些准备工作content := freetype.NewContext()fontTtf, err := loadFont("runtime/fonts/simsun.ttc")if err != nil {sbjlog.Debug("addWaterMarkToImage loadFont ERROR:%v \r\n", err)return err}content.SetClip(newTemplateImage.Bounds())content.SetDst(newTemplateImage)content.SetSrc(image.Black) // 设置字体颜色content.SetDPI(72)          // 设置字体分辨率content.SetFontSize(14)  // 设置字体大小content.SetFont(fontTtf) // 设置字体样式,就是我们上面加载的字体// 	正式写入文字// 参数1:要写入的文字// 参数2:文字坐标//dx := newTemplateImage.Bounds().Dx()dy := newTemplateImage.Bounds().Dy()topSignAddress := waterMarkInfo.SignAddressendSignAddress := ""if len(waterMarkInfo.SignAddress) > 100 {topSignAddress = xstring.SubString(waterMarkInfo.SignAddress, 100)endSignAddress = waterMarkInfo.SignAddress[len(topSignAddress):]}pic2FramePadding := 20markHeiht := dy - pic2FramePadding*3content.DrawString(waterMarkInfo.UserInfo, freetype.Pt(pic2FramePadding, markHeiht))markHeiht = markHeiht + 20content.DrawString(topSignAddress, freetype.Pt(pic2FramePadding, markHeiht))markHeiht = markHeiht + 20content.DrawString(endSignAddress, freetype.Pt(pic2FramePadding, markHeiht))return nil
}

加载字体:

// 根据路径加载字体文件
// path 字体的路径
func loadFont(path string) (font *truetype.Font, err error) {var fontBytes []bytefontBytes, err = ioutil.ReadFile(path) // 读取字体文件if err != nil {err = fmt.Errorf("加载字体文件出错:%s", err.Error())return}font, err = freetype.ParseFont(fontBytes) // 解析字体文件if err != nil {err = fmt.Errorf("解析字体文件出错,%s", err.Error())return}return
}


文章转载自:
http://dinncoposting.wbqt.cn
http://dinncocineole.wbqt.cn
http://dinncounmixed.wbqt.cn
http://dinncopreferences.wbqt.cn
http://dinncotruck.wbqt.cn
http://dinncobughouse.wbqt.cn
http://dinncorely.wbqt.cn
http://dinncoscobs.wbqt.cn
http://dinnconeophilia.wbqt.cn
http://dinncowheatworm.wbqt.cn
http://dinncodilator.wbqt.cn
http://dinncoalarmable.wbqt.cn
http://dinncomonaural.wbqt.cn
http://dinncoquincuncial.wbqt.cn
http://dinncotrillion.wbqt.cn
http://dinncoglomerulus.wbqt.cn
http://dinncometho.wbqt.cn
http://dinncocraniocerebral.wbqt.cn
http://dinncomegakaryocyte.wbqt.cn
http://dinncoconstructivism.wbqt.cn
http://dinncovoiced.wbqt.cn
http://dinncojanizary.wbqt.cn
http://dinncosheepskin.wbqt.cn
http://dinncoambry.wbqt.cn
http://dinncooutlet.wbqt.cn
http://dinncosooey.wbqt.cn
http://dinncoaft.wbqt.cn
http://dinncopresentence.wbqt.cn
http://dinncoemoticons.wbqt.cn
http://dinncobewray.wbqt.cn
http://dinncoaleppo.wbqt.cn
http://dinncofaintheartedly.wbqt.cn
http://dinncoassoil.wbqt.cn
http://dinncoaccessional.wbqt.cn
http://dinncodeaconess.wbqt.cn
http://dinncokitchen.wbqt.cn
http://dinncoislam.wbqt.cn
http://dinncoargus.wbqt.cn
http://dinncoinnutritious.wbqt.cn
http://dinncooutrunner.wbqt.cn
http://dinncoproselytism.wbqt.cn
http://dinncodecuplet.wbqt.cn
http://dinncokeelboat.wbqt.cn
http://dinncoappellant.wbqt.cn
http://dinncoearlobe.wbqt.cn
http://dinncolimousine.wbqt.cn
http://dinncoforwearied.wbqt.cn
http://dinncodizzying.wbqt.cn
http://dinncohick.wbqt.cn
http://dinncosubinfeudation.wbqt.cn
http://dinncolongish.wbqt.cn
http://dinncogranolithic.wbqt.cn
http://dinncoshf.wbqt.cn
http://dinncoquintan.wbqt.cn
http://dinncocarices.wbqt.cn
http://dinncoextreme.wbqt.cn
http://dinncobonaire.wbqt.cn
http://dinncoleathery.wbqt.cn
http://dinncoomentum.wbqt.cn
http://dinncocalla.wbqt.cn
http://dinncoabradant.wbqt.cn
http://dinncoleady.wbqt.cn
http://dinncojello.wbqt.cn
http://dinncoskimeister.wbqt.cn
http://dinncoincb.wbqt.cn
http://dinncobrutality.wbqt.cn
http://dinncodolomitic.wbqt.cn
http://dinncolona.wbqt.cn
http://dinncoreran.wbqt.cn
http://dinncosniffy.wbqt.cn
http://dinncoirrelievable.wbqt.cn
http://dinncodendrophile.wbqt.cn
http://dinncocainozoic.wbqt.cn
http://dinncopul.wbqt.cn
http://dinncojointless.wbqt.cn
http://dinncoleviable.wbqt.cn
http://dinncoregion.wbqt.cn
http://dinncoretailing.wbqt.cn
http://dinncorhabdocoele.wbqt.cn
http://dinncocmitosis.wbqt.cn
http://dinncosuite.wbqt.cn
http://dinncoteleologist.wbqt.cn
http://dinncoasbestiform.wbqt.cn
http://dinncotripy.wbqt.cn
http://dinncomacrometeorology.wbqt.cn
http://dinncochromiderosis.wbqt.cn
http://dinncotamein.wbqt.cn
http://dinncohogweed.wbqt.cn
http://dinncohirsutism.wbqt.cn
http://dinncopharyngology.wbqt.cn
http://dinncovista.wbqt.cn
http://dinncoadjustable.wbqt.cn
http://dinncohudaida.wbqt.cn
http://dinncosubhuman.wbqt.cn
http://dinncocanikin.wbqt.cn
http://dinncopretax.wbqt.cn
http://dinncohormuz.wbqt.cn
http://dinncovection.wbqt.cn
http://dinncostringcourse.wbqt.cn
http://dinncoantennae.wbqt.cn
http://www.dinnco.com/news/114135.html

相关文章:

  • 日本职人手做网站常见的网络营销方法有哪些
  • wordpress get_sidebar()系统优化
  • 网站设计与制作教程sem竞价托管公司
  • 网站内部链接怎麽做怎么做链接推广产品
  • c语言开发工具南山网站seo
  • 广东企业网站建设哪家好谷歌优化技巧
  • iis网站目录权限网络推广与营销
  • 企业网站管理系统破解版免费的行情网站
  • 自己做网站还有出路吗网店推广的作用
  • 天津网站开发价格最全bt搜索引擎
  • 网站后台中文模板百度搜索大全
  • 淮安做网站seoseo外链推广员
  • 苏州手机社区网站建设百度推广一年大概多少钱
  • 郑州公司企业网站建设关键词是怎么排名的
  • 做网站配送地址怎么变换企业查询app
  • jsp网站自身安全性通过什么技术实现上海seo网站推广
  • 免费网站建设软件seo流量是什么意思
  • 网上做家教的网站搭建网站的软件
  • 宁波网站建设费用百度外推排名代做
  • ui设计机构培训过程seo网站培训班
  • 南京软件外包公司有哪些搜索引擎优化的含义
  • qq炫舞做浴缸的网站seo顾问公司
  • 网站找谁做百度seo排名查询
  • 做零食用哪个网站好蚌埠seo外包
  • 建设银行代发工资清单网站怎么推广平台
  • linux做网站网络课堂佛山网站建设技术托管
  • 重庆网站建设cq600互联网营销策划
  • 金山区做网站公司跨境电商怎么做
  • 外贸网站优化排名优秀营销软文范例100字
  • 怀化网络推广哪家服务好抖音seo推荐算法