web海报合成,实现高斯模糊效果

2024-01-17  本文已影响0人  小葵去旅行

需求:
将课程宣传图、课程信息(标题、价格、链接二维码)及用户信息(用户名和头像)合成海报。最终效果如图所示


最终合成图

步骤分析:

StackBlur.image('coverImg', targetCanvas, 30, fales);
this.blur_img_src = targetCanvas.toDataUrl('image/png, 1');

最终得到base64格式的图片地址。其中由于页面长度会影响图片的绘制起止位置,设置海报容器position:fixed 即可解决。

setImgPositionCenter(blurImg){
  let card = this.$refs.card;// 获取海报容器组件
  card.style.display = 'block';
  let width = blurImg.clientWidth;
  let height= blurImg.clientHeight;
  blurImg.style['margin-left'] = '-' + Match.round(width/2)+'px';
 blurImg.style['height'] =  Match.floor(height)+'px';
}
  html2canvas(this.$refs.card,{
width: width,
height: height,
scale:1,
allowTaint: false,
useCORS:true,
}).then((canvas)=>{
  let post_src = canvas.toDataURL('image/png', 1);
  this.$refs.card.remove();
 this.$emit('endCreatedPoster', poster_src)
)
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = 214;
canvas.height= 214;
//将svg转canvas
let str = $('.html-card').find('svg').get(0).outerHTML;
let v = Canvg.fromString(ctx, str);
v.start();
//找出 html中的svg替换成canvas
let svgEl = $(".html-card").find("svg").get(0);
$(canvas).replaceAll(svgEl);
上一篇下一篇

猜你喜欢

热点阅读