生而为人 谁不付出 谁不努力

微信小程序端有关于一篇文章生成一张海报图片,用于用户保存之后分享,实际开发的过程中遇到的一些问题如下:

1:开发编辑器里面生成存在的情况

A:生成的海报时候需要获取一张网络图片,但是小程序手机端测试是需要使用wx.getImageInfo()方法处理之后才可以

wx.getImageInfo(Object object)

获取图片信息。网络图片需先配置download域名才能生效。

参数

Object object

属性 类型 默认值 必填 说明
src string   图片的路径,支持网络路径、本地路径、代码包路径
success function   接口调用成功的回调函数
fail function   接口调用失败的回调函数
complete function   接口调用结束的回调函数(调用成功、失败都会执行)

object.success 回调函数

参数

Object res

属性 类型 说明 最低版本
width number 图片原始宽度,单位px。不考虑旋转。  
height number 图片原始高度,单位px。不考虑旋转。  
path string 图片的本地路径  
orientation string 拍照时设备方向 1.9.90
type string 图片格式 1.9.90

2:生成海报图片时候 因为微信小程序是同步请求数据

有的数据信息还没有拿到就去实现生成了海报分享图片,就会存在有时候没有图片,有时候没有文章,所以最后想到直接在服务器端生成一张图片

3:Java后台生成海报

话不多数 ,这个我就直接上代码,直接运行就可以看到实际的效果,但是每个人生成的海报样式什么的 需要自己慢慢的的调试,我记得我调试文本的时候是真的难的很 一个一个像素的调啊 好了 下面贴出代码

A:main方法执行就可以看到生成的海报图片啦

package com.myFirstSpring.test; import java.awt.Font;import sun.font.FontDesignMetrics;/** * @author tqf* @version 创建时间:2020-3-13 下午2:36:41 * 类说明:*/
public class PosterMain {public static void main(String[] args) throws Exception {String qrCodeUrl = "http://m.xinjuenet.com/images/banner/i-wx.jpg"; //二维码String goodsUrl = "http://m.xinjuenet.com/images/banner/b-xldh.jpg"; //顶部图片String avatarUrl = "http://images.xinjuenet.com//20190529140101.jpg"; //头像String name = "和自己对话";String desc = "沉默王二1,《Web 全栈开发进阶之路》作者;一个不止写代码的程序员,还写有趣有益的文字,给不喜欢严肃的你。沉默王二,《Web 全栈开发进阶之路》作者;一个不止写代码的程序员,还写有趣有益的文字,给不喜欢严肃的你。";String price = "重度抑郁1";Poster poster_ = new Poster();poster_.setWidth(375);poster_.setHeight(670);poster_.setQrCodeUrl(qrCodeUrl); //二维码poster_.setGoodsUrl(goodsUrl); //顶部bannerposter_.setDesc(desc); //测评结果说明poster_.setPrice(price); //测评结果标题Poster poster = PosterUtil.initPoster(poster_);PosterUtil.drawPoster(poster);}}

B:关于生成海报图片的实体类 Poster

package com.myFirstSpring.test; import java.awt.Color;
import java.awt.Font;
import java.io.Serializable;/** * @author tqf* @version 创建时间:2020-3-13 下午2:32:59 * 类说明:Poster实体类*/
public class Poster implements Serializable {private int width;//海报的宽(像素为单位)private int height;//海报的高//头像private String avatarUrl;//头像urlprivate int avatarX;//头像左上角横坐标private int avatarY;//头像左上角纵坐标private int avatarWidth;//头像宽private int avatarHeight;//头像高private boolean isCircle;//是否圆形头像//名字private String name;private Font nameFont;private Color nameColor;private int nameX;private int nameY;//商品private String goodsUrl;private int goodsX;private int goodsY;private int goodsWidth;private int goodsHeight;//商品描述private String desc;private Font descFont;private Color descColor;private int descX;private int descY;//商品价格private String price;private Font priceFont;private Color priceColor;private int priceX;private int priceY;//测评结果标题private String result;private Font resultFont;private Color resultColor;private int resultX;private int resultY;//测评结果描述private String result_content;private Font result_contentFont;private Color result_contentColor;private int result_contentX;private int result_contentY;/*** @return the result*/public String getResult() {return result;}/*** @param result the result to set*/public void setResult(String result) {this.result = result;}/*** @return the resultFont*/public Font getResultFont() {return resultFont;}/*** @param resultFont the resultFont to set*/public void setResultFont(Font resultFont) {this.resultFont = resultFont;}/*** @return the resultColor*/public Color getResultColor() {return resultColor;}/*** @param resultColor the resultColor to set*/public void setResultColor(Color resultColor) {this.resultColor = resultColor;}/*** @return the resultX*/public int getResultX() {return resultX;}/*** @param resultX the resultX to set*/public void setResultX(int resultX) {this.resultX = resultX;}/*** @return the resultY*/public int getResultY() {return resultY;}/*** @param resultY the resultY to set*/public void setResultY(int resultY) {this.resultY = resultY;}/*** @return the result_content*/public String getResult_content() {return result_content;}/*** @param result_content the result_content to set*/public void setResult_content(String result_content) {this.result_content = result_content;}/*** @return the result_contentFont*/public Font getResult_contentFont() {return result_contentFont;}/*** @param result_contentFont the result_contentFont to set*/public void setResult_contentFont(Font result_contentFont) {this.result_contentFont = result_contentFont;}/*** @return the result_contentColor*/public Color getResult_contentColor() {return result_contentColor;}/*** @param result_contentColor the result_contentColor to set*/public void setResult_contentColor(Color result_contentColor) {this.result_contentColor = result_contentColor;}/*** @return the result_contentX*/public int getResult_contentX() {return result_contentX;}/*** @param result_contentX the result_contentX to set*/public void setResult_contentX(int result_contentX) {this.result_contentX = result_contentX;}/*** @return the result_contentY*/public int getResult_contentY() {return result_contentY;}/*** @param result_contentY the result_contentY to set*/public void setResult_contentY(int result_contentY) {this.result_contentY = result_contentY;}//小程序码private String qrCodeUrl;private int qrCodeX;private int qrCodeY;private int qrCodeWidth;private int qrCodeHeight;//提示1private String tip1;private Font tip1Font;private Color tip1Color;private int tip1X;private int tip1Y;//提示2private String tip2;private Font tip2Font;private Color tip2Color;private int tip2X;private int tip2Y;//底部栏private Color footerColor;private int footerWidth;private int footerHeight;private int footerX;private int footerY;//底部栏提示字private String footerTip;private Font footerTipFont;private Color footerTipColor;private int footerTipX;private int footerTipY;public int getWidth() {return width;}public void setWidth(int width) {this.width = width;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}public String getAvatarUrl() {return avatarUrl;}public void setAvatarUrl(String avatarUrl) {this.avatarUrl = avatarUrl;}public int getAvatarX() {return avatarX;}public void setAvatarX(int avatarX) {this.avatarX = avatarX;}public int getAvatarY() {return avatarY;}public void setAvatarY(int avatarY) {this.avatarY = avatarY;}public int getAvatarWidth() {return avatarWidth;}public void setAvatarWidth(int avatarWidth) {this.avatarWidth = avatarWidth;}public int getAvatarHeight() {return avatarHeight;}public void setAvatarHeight(int avatarHeight) {this.avatarHeight = avatarHeight;}public boolean isCircle() {return isCircle;}public void setCircle(boolean circle) {isCircle = circle;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Font getNameFont() {return nameFont;}public void setNameFont(Font nameFont) {this.nameFont = nameFont;}public Color getNameColor() {return nameColor;}public void setNameColor(Color nameColor) {this.nameColor = nameColor;}public int getNameX() {return nameX;}public void setNameX(int nameX) {this.nameX = nameX;}public int getNameY() {return nameY;}public void setNameY(int nameY) {this.nameY = nameY;}public String getGoodsUrl() {return goodsUrl;}public void setGoodsUrl(String goodsUrl) {this.goodsUrl = goodsUrl;}public int getGoodsX() {return goodsX;}public void setGoodsX(int goodsX) {this.goodsX = goodsX;}public int getGoodsY() {return goodsY;}public void setGoodsY(int goodsY) {this.goodsY = goodsY;}public int getGoodsWidth() {return goodsWidth;}public void setGoodsWidth(int goodsWidth) {this.goodsWidth = goodsWidth;}public int getGoodsHeight() {return goodsHeight;}public void setGoodsHeight(int goodsHeight) {this.goodsHeight = goodsHeight;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public Font getDescFont() {return descFont;}public void setDescFont(Font descFont) {this.descFont = descFont;}public Color getDescColor() {return descColor;}public void setDescColor(Color descColor) {this.descColor = descColor;}public int getDescX() {return descX;}public void setDescX(int descX) {this.descX = descX;}public int getDescY() {return descY;}public void setDescY(int descY) {this.descY = descY;}public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}public Font getPriceFont() {return priceFont;}public void setPriceFont(Font priceFont) {this.priceFont = priceFont;}public Color getPriceColor() {return priceColor;}public void setPriceColor(Color priceColor) {this.priceColor = priceColor;}public int getPriceX() {return priceX;}public void setPriceX(int priceX) {this.priceX = priceX;}public int getPriceY() {return priceY;}public void setPriceY(int priceY) {this.priceY = priceY;}public String getQrCodeUrl() {return qrCodeUrl;}public void setQrCodeUrl(String qrCodeUrl) {this.qrCodeUrl = qrCodeUrl;}public int getQrCodeX() {return qrCodeX;}public void setQrCodeX(int qrCodeX) {this.qrCodeX = qrCodeX;}public int getQrCodeY() {return qrCodeY;}public void setQrCodeY(int qrCodeY) {this.qrCodeY = qrCodeY;}public int getQrCodeWidth() {return qrCodeWidth;}public void setQrCodeWidth(int qrCodeWidth) {this.qrCodeWidth = qrCodeWidth;}public int getQrCodeHeight() {return qrCodeHeight;}public void setQrCodeHeight(int qrCodeHeight) {this.qrCodeHeight = qrCodeHeight;}public String getTip1() {return tip1;}public void setTip1(String tip1) {this.tip1 = tip1;}public Font getTip1Font() {return tip1Font;}public void setTip1Font(Font tip1Font) {this.tip1Font = tip1Font;}public Color getTip1Color() {return tip1Color;}public void setTip1Color(Color tip1Color) {this.tip1Color = tip1Color;}public int getTip1X() {return tip1X;}public void setTip1X(int tip1X) {this.tip1X = tip1X;}public int getTip1Y() {return tip1Y;}public void setTip1Y(int tip1Y) {this.tip1Y = tip1Y;}public String getTip2() {return tip2;}public void setTip2(String tip2) {this.tip2 = tip2;}public Font getTip2Font() {return tip2Font;}public void setTip2Font(Font tip2Font) {this.tip2Font = tip2Font;}public Color getTip2Color() {return tip2Color;}public void setTip2Color(Color tip2Color) {this.tip2Color = tip2Color;}public int getTip2X() {return tip2X;}public void setTip2X(int tip2X) {this.tip2X = tip2X;}public int getTip2Y() {return tip2Y;}public void setTip2Y(int tip2Y) {this.tip2Y = tip2Y;}public Color getFooterColor() {return footerColor;}public void setFooterColor(Color footerColor) {this.footerColor = footerColor;}public int getFooterWidth() {return footerWidth;}public void setFooterWidth(int footerWidth) {this.footerWidth = footerWidth;}public int getFooterHeight() {return footerHeight;}public void setFooterHeight(int footerHeight) {this.footerHeight = footerHeight;}public int getFooterX() {return footerX;}public void setFooterX(int footerX) {this.footerX = footerX;}public int getFooterY() {return footerY;}public void setFooterY(int footerY) {this.footerY = footerY;}public String getFooterTip() {return footerTip;}public void setFooterTip(String footerTip) {this.footerTip = footerTip;}public Font getFooterTipFont() {return footerTipFont;}public void setFooterTipFont(Font footerTipFont) {this.footerTipFont = footerTipFont;}public Color getFooterTipColor() {return footerTipColor;}public void setFooterTipColor(Color footerTipColor) {this.footerTipColor = footerTipColor;}public int getFooterTipX() {return footerTipX;}public void setFooterTipX(int footerTipX) {this.footerTipX = footerTipX;}public int getFooterTipY() {return footerTipY;}public void setFooterTipY(int footerTipY) {this.footerTipY = footerTipY;}
}

C:生成海报的工具方法

package com.myFirstSpring.test; import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Transparency;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.net.URL;import javax.imageio.ImageIO;import sun.font.FontDesignMetrics;/** * @author tqf* @version 创建时间:2020-3-13 下午2:34:33 * 类说明:海报工具类*/
public class PosterUtil {static Poster initPoster(Poster poster_) {Poster poster = new Poster();//画布poster.setWidth(poster_.getWidth());poster.setHeight(poster_.getHeight());//头像/* poster.setAvatarUrl(avatarUrl);poster.setCircle(true);poster.setAvatarX((int)(width/11.5));poster.setAvatarY(height/28);poster.setAvatarWidth(width/6);poster.setAvatarHeight(width/6);//名字poster.setName(name);poster.setNameFont(new Font("宋体",Font.PLAIN,width/24));poster.setNameColor(new Color(33,33,33));poster.setNameX(poster.getAvatarX()+poster.getAvatarWidth()+20);poster.setNameY(poster.getAvatarY()+poster.getAvatarHeight()/2+15);*///商品poster.setGoodsUrl(poster_.getGoodsUrl());poster.setGoodsWidth(375); //banner图宽度填充满poster.setGoodsHeight(150);poster.setGoodsX((poster_.getWidth()-poster.getGoodsWidth())/2);poster.setGoodsY(poster.getAvatarY()+poster.getAvatarHeight()); //+100是往下移动//测评结果poster.setDesc("测评结果");poster.setDescColor(Color.GRAY);int size = poster_.getWidth()/17;poster.setDescFont(new Font("宋体",Font.BOLD,18));poster.setDescX((poster_.getWidth()-"测评结果".length()*size)/6-15);poster.setDescY(poster.getGoodsY()+poster.getGoodsHeight()+(int)(poster_.getHeight()/21.3)+15);//测评结果标题poster.setPrice(poster_.getPrice());poster.setPriceColor(Color.BLACK);poster.setPriceFont(new Font("宋体",Font.BOLD,size));poster.setPriceX((poster_.getWidth()-poster_.getPrice().length()*size)/5);poster.setPriceY(poster.getGoodsY()+poster.getGoodsHeight()+(int)(poster_.getHeight()/10.6)+18);//测评说明poster.setResult("测评说明");poster.setResultColor(Color.GRAY);poster.setResultFont(new Font("宋体",Font.BOLD,18));poster.setResultX((poster_.getWidth()-"测评说明".length()*size)/6-15);poster.setResultY(poster.getGoodsY()+poster.getGoodsHeight()+(int)(poster_.getHeight()/21.3)+90);//测评说明描述poster.setResult_content(poster_.getDesc());poster.setResult_contentColor(Color.BLACK);poster.setResult_contentFont(new Font("宋体",Font.BOLD,17));poster.setResult_contentX((3*size)/6+23);poster.setResult_contentY(poster.getGoodsY()+poster.getGoodsHeight()+(int)(poster_.getHeight()/21.3)+120);//小程序码poster.setQrCodeUrl(poster_.getQrCodeUrl());poster.setQrCodeWidth((int)(poster_.getWidth()/2.85));poster.setQrCodeHeight((int)(poster_.getWidth()/2.85));poster.setQrCodeX((int)(poster_.getWidth()/16.5));poster.setQrCodeY(poster_.getHeight()-poster.getQrCodeHeight()-(int)(poster_.getHeight()/7.68));//tips1poster.setTip1("长按识别小程序码");poster.setTip1Color(Color.BLACK);poster.setTip1Font(new Font("宋体",Font.BOLD,poster_.getWidth()/21));poster.setTip1X(poster.getQrCodeX()+poster.getQrCodeWidth()+20);poster.setTip1Y(poster.getQrCodeY()+poster.getQrCodeHeight()/2+10);//tips2poster.setTip2("咨询我们是专业的");//好物与好友一起分享  poster.setTip2Color(Color.GRAY);poster.setTip2Font(new Font("宋体",Font.PLAIN,poster_.getWidth()/25)); poster.setTip2X(poster.getQrCodeX()+poster.getQrCodeWidth()+20);poster.setTip2Y(poster.getQrCodeY()+poster.getQrCodeHeight()/2+32);//90是这句问题与上面的间距//footerposter.setFooterColor(new Color(49,196,141));poster.setFooterWidth(poster_.getWidth());poster.setFooterHeight(poster_.getHeight()/13);poster.setFooterX(0);poster.setFooterY(poster_.getHeight()-poster.getFooterHeight());//footer tipsposter.setFooterTip("「心觉咨询」提供内容及技术支持");poster.setFooterTipColor(Color.WHITE);poster.setFooterTipFont(new Font("宋体",Font.BOLD,poster_.getWidth()/21));poster.setFooterTipX((poster_.getWidth()-(poster.getFooterTip().length()*poster_.getWidth()/21))/2);poster.setFooterTipY(poster_.getHeight()-poster.getFooterHeight()/3);return poster;}static void drawPoster(Poster poster) throws Exception {long startTime = System.currentTimeMillis();String qrCodeUrl = poster.getQrCodeUrl();String goodsUrl = poster.getGoodsUrl();String avatarUrl = poster.getAvatarUrl();BufferedImage qrCodeImage = ImageIO.read(new URL(qrCodeUrl));BufferedImage goodsImage = ImageIO.read(new URL(goodsUrl));int width = poster.getWidth();int height = poster.getHeight();//画布BufferedImage canvas = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);Graphics2D g = (Graphics2D) canvas.getGraphics();g.setBackground(Color.WHITE);//设置背景色g.clearRect(0, 0, width, height);// 设置文字抗锯齿g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);/*//圆形头像BufferedImage newAvatar = circle(avatarUrl,poster.getAvatarWidth());//画头像g.drawImage(newAvatar.getScaledInstance(newAvatar.getWidth(), newAvatar.getHeight(), Image.SCALE_SMOOTH), poster.getAvatarX(), poster.getAvatarY(), null);// 4. 写字(昵称)g.setColor(poster.getNameColor());g.setFont(poster.getNameFont());g.drawString(poster.getName(), poster.getNameX(), poster.getNameY());*///画商品
//       g.drawImage(Thumbnails.of(goodsImage).size(poster.getGoodsWidth(), poster.getGoodsHeight()).asBufferedImage(), poster.getGoodsX(), poster.getGoodsY(), null);g.drawImage(goodsImage.getScaledInstance(poster.getGoodsWidth(), poster.getGoodsHeight(), Image.SCALE_SMOOTH), poster.getGoodsX(), poster.getGoodsY(), null);//测评结果g.setColor(poster.getDescColor());g.setFont(poster.getDescFont());g.drawString("测评结果", poster.getDescX(), poster.getDescY());//测评结果标题g.setColor(poster.getPriceColor());g.setFont(poster.getPriceFont());g.drawString(poster.getPrice(), poster.getPriceX(), poster.getPriceY());//画测评说明g.setColor(poster.getResultColor());g.setFont(poster.getResultFont());g.drawString(poster.getResult(), poster.getResultX(), poster.getResultY());//画测评说明描述/*  g.setColor(poster.getResult_contentColor());g.setFont(poster.getResult_contentFont());g.drawString("结婚苏丹发挥撒旦反对萨苏打法苏丹法苏丹法", poster.getResult_contentX()+25, poster.getResult_contentY());*/FontDesignMetrics metrics = FontDesignMetrics.getMetrics(poster.getResult_contentFont());String zh = poster.getResult_content();String[] rows = makeLineFeed(zh, metrics, 300).split("\n");int  y = poster.getResult_contentY();for (int i = 0; i < rows.length; i++) {g.setColor(poster.getResult_contentColor());g.setFont(poster.getResult_contentFont());if(i > 0){y+=28;}if(i>4){break;}else if(i==4){g.drawString(rows[i].substring(0, rows[i].length()-3)+" ...", poster.getResult_contentX()+25, y); break;}g.drawString(rows[i], poster.getResult_contentX()+25, y);}//画小程序码g.drawImage(qrCodeImage.getScaledInstance(poster.getQrCodeWidth(), poster.getQrCodeHeight(), Image.SCALE_SMOOTH),poster.getQrCodeX(), poster.getQrCodeY(), null);//画tips1g.setColor(poster.getTip1Color());g.setFont(poster.getTip1Font());g.drawString(poster.getTip1(), poster.getTip1X(), poster.getTip1Y());//画tips2g.setColor(poster.getTip2Color());g.setFont(poster.getTip2Font());g.drawString(poster.getTip2(), poster.getTip2X(), poster.getTip2Y());//画底部栏g.setColor(poster.getFooterColor());g.fillRect(poster.getFooterX(),poster.getFooterY(),poster.getFooterWidth(),poster.getFooterHeight());//画底部栏提示g.setColor(poster.getFooterTipColor());g.setFont(poster.getFooterTipFont());g.drawString(poster.getFooterTip(), poster.getFooterTipX(), poster.getFooterTipY());g.dispose();File resultImg = new File("D:\\demo.png");ImageIO.write(canvas, "png", resultImg);//上传服务器代码//ByteArrayOutputStream bs = new ByteArrayOutputStream();//ImageOutputStream imgOut = ImageIO.createImageOutputStream(bs);//ImageIO.write(canvas, "png", imgOut);//InputStream inSteam = new ByteArrayInputStream(bs.toByteArray());//String url = OSSFactory.build().upload(inSteam, UUID.randomUUID().toString()+".png");System.out.println("生成成功!");System.out.println("耗时: " + (System.currentTimeMillis()-startTime)/1000.0 + "s");System.out.println("生成文件路径: " + resultImg.getAbsolutePath());}private static BufferedImage circle(String avatar_img,int width) throws Exception {BufferedImage avatar = ImageIO.read(new URL(avatar_img));BufferedImage newAvatar = new BufferedImage(width, width, BufferedImage.TYPE_INT_ARGB);Ellipse2D.Double shape = new Ellipse2D.Double(0, 0, width, width);Graphics2D g2 = newAvatar.createGraphics();newAvatar = g2.getDeviceConfiguration().createCompatibleImage(width, width, Transparency.TRANSLUCENT);g2 = newAvatar.createGraphics();g2.setComposite(AlphaComposite.Clear);g2.fill(new Rectangle(newAvatar.getWidth(), newAvatar.getHeight()));g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, 1.0f));g2.setClip(shape);// 使用 setRenderingHint 设置抗锯齿g2 = newAvatar.createGraphics();g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);g2.fillRoundRect(0, 0,width, width, width, width);g2.setComposite(AlphaComposite.SrcIn);g2.drawImage(avatar, 0, 0, width, width, null);g2.dispose();return newAvatar;}//文本换行处理public static String makeLineFeed(String zh, FontDesignMetrics metrics, int max_width) {StringBuilder sb = new StringBuilder();int line_width = 0;for (int i = 0; i < zh.length(); i++) {char c = zh.charAt(i);sb.append(c);// 如果主动换行则跳过if (sb.toString().endsWith("\n")) {line_width = 0;continue;}// FontDesignMetrics 的 charWidth() 方法可以计算字符的宽度int char_width = metrics.charWidth(c);line_width += char_width;// 如果当前字符的宽度加上之前字符串的已有宽度超出了海报的最大宽度,则换行if (line_width >= max_width - char_width) {line_width = 0;sb.append("\n");}}return sb.toString();}
}

下面来看看实际生成的效果图吧 ,还有一点生成图片存放地址我是写File resultImg = new File("D:\\demo.png");

最后说一下,如果搞好你看到这篇文章,刚好有可以用到,那就点赞收藏加关注 ,谢谢

JAVA后台生成海报分享图片(简单配置轻松生成)相关推荐

  1. java后端生成微信分享图片:使用freemarker、cssbox

    使用freemarker.cssbox生成微信分享图片 1. 生成微信图片我所想的有两种方式 利用图片水印来制作,可以先制作好想要的模板在利用水印将相应的内容添加打相应的位置完成 利用freemark ...

  2. Java 批量导出PPT为图片,并合并生成PDF

    Java 批量导出PPT为图片,并合并生成PDF 最近有小伙伴需要把PPT打印,但苦于PPT太多,浪费纸张,所以特别写了这个合并多张PPT到一张A4纸上并生成PDF方便打印的程序: 前期准备 把PPT ...

  3. php生成红包,PHP 生成微信红包代码简单,php生成红包代码

    PHP 生成微信红包代码简单,php生成红包代码 废话不多说了,一切解释尽在代码中,具体代码如下所示: /** * @param $total [你要发的红包总额] * @param int $num ...

  4. uni-App小程序、canvas 生成海报 +下载图片+分享微信好友

    功能:分享弹窗,生成海报并支持保存,目前仅支持微信小程序 ·插件包链接 https://ext.dcloud.net.cn/plugin?id=586 代码: <template>< ...

  5. uni-app生成分享图片( 使用 Painter 生成分享海报)

    Painter 支持文本.图片.矩形.qrcode 类型的 view 绘制. 如何使用 1.引入代码.注意:存放目录   uni-app根据不同平台插件存放目录不同. git clone https: ...

  6. 【微信小程序】用painter插件生成海报分享朋友圈简单教程

    第一步:去Git下载插件 1.这是核心插件 需要下载全部内容 https://github.com/Kujiale-Mobile/PainterCore 2.官方文档 https://github.c ...

  7. python生成海报商品图片_如何优雅的生成海报/动态合成图片 ?

    poster-generater ⚡⚡⚡海报生成器. 只需要一个简单的 json 配置即可生成你需要的海报... 说明 此项目诞生有一段时间了,我本人也一直在使用这个程序,从一开始的 golang 版 ...

  8. 【小程序】728- 小程序如何生成海报分享朋友圈

    作者:小白 https://segmentfault.com/a/1190000019083548 项目需求写完有一段时间了,但是还是想回过来总结一下,一是对项目的回顾优化等,二是对坑的地方做个记录, ...

  9. 小程序如何生成海报分享朋友圈,android移动开发技术与应用

    openStatus = false console.log('请设置允许访问相册') wx.showToast({ title: '请设置允许访问相册', icon: 'none' }) } }) ...

  10. 微信小程序-运用painter插件生成海报分享朋友圈--比canvas好用

    微信小程序-运用painter插件生成海报–比canvas好用 先放插件地址:https://github.com/Kujiale-Mobile/Painter 还有个可视化把海报生成代码的地址:ht ...

最新文章

  1. maven <skip></skip>属性
  2. Android时间选择器对话框的使用
  3. 多线程(thread)+进程(Process)
  4. Java基础学习总结(61)——Java项目开发要注意的60个问题
  5. 一步一步重构柔性数组和智能指针
  6. HTTP协议和HttpClient的入门
  7. 让你的MSN更精彩!聊天伴侣小i机器人试用体验
  8. 专访数据挖掘领头人韩家炜教授:不要迷信权威,做学问要秉承「三个真实」...
  9. 南航计算机系复试内容,2010年南航计算机专业复试真题
  10. 2023武汉大学计算机考研信息汇总
  11. 关于扫码点餐多人实时共享订单的思考
  12. 做IT就要做到高层!
  13. 燃起图与燃尽图,故事地图和产品线路图分析
  14. 蜜蜂问题- 斐波那契数列
  15. 蚂蚁算法python_Python编程实现蚁群算法详解
  16. Redis--变慢的原因及排查方法--系统方面
  17. Web安全之SQL注入总结
  18. 计算机二维动画实验原理,浅析计算机二维动画制作
  19. RGB、Lab、YUV、HSI、HSV等颜色空间的区别
  20. 【ESP32 S3 开发】基于I2S协议驱动INMP441数字麦克风 实现语音采集

热门文章

  1. 猫哥教你写爬虫 045--协程
  2. 人人商城图片错乱问题
  3. 短信网关平台选型推荐
  4. 什么是d.ts文件,它是不是typescript文件?
  5. 普适计算-2014/04/04
  6. OneZero第三周第一次站立会议(2016.4.4)
  7. 在Windows 2008中使用winvnc
  8. 【视角】限贷传闻横扫楼市 专家看空房地产业
  9. css怎样清除隐藏溢出,Css溢出隐藏
  10. xamp环境搭建Pikachu实验环境搭建